网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > VC++ > 正文
Winsock编程宝典
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/15
下载{$ArticleTitle}原创论文样式
份读者还是不清楚自己该先有哪些发展工具才能开发 Winsock 1.1 的应用程式?

  基本上,读者当然一定要有 Microsoft C或 Borland C之类的编译程式(Compiler)才能编译您的程式;至於和 Winsock 有关的档案只有两个,一个是『winsock.h』,另一个是『winsock.lib』。这两个档案,读者们可以利用anonymous ftp的方式从SEEDNET 台北主机「tpts1.seed.net.tw」的『UPLOAD/WINKING/Winsock_Documents』目录下取得。

接著笔者要再为各位介绍剩下的几个函式,包括 select()、setsockopt()、getsockopt(),以及变更系统的 Blocking Hook 函式时,所要用到的WSASetBlockingHook() 和 WSAUnhookBlockingHook()。

【特殊的 select 函式】

  如果写过 UNIX BSD socket 程式的读者,一定都知道这个 select() 函式是很好用的。因为它可以帮您检查一整组(set)的 sockets 是否可以读、写资料,也可以用来检查 socket 是否已和对方连接成功,或者是对方是否已将相对的socket 关闭了等等。但是在 Winsock 1.1 及 MS Windows 3.X 「非强制性多工」的环境下,它是否仍是那麽好用呢?我们在使用它时,是否要注意些什麽呢?现在就让笔者来告诉您吧。

◎ select():检查一或多个 Sockets 是否处於可读、可写或错误的状态。
格式: int PASCAL FAR select( int nfds, fd_set FAR *readfds,fd_set FAR*writefds, fd_set FAR *exceptfds, const struct time val FAR *timeout )
参数: nfds 此参数在此并无作用
readfds 要被检查是否可读的 Sockets
writefds 要被检查是否可写的 Sockets
exceptfds 要被检查是否有错误的 Sockets
timeout 此函式该等待的时间
传回值: 成功 - 符合条件的 Sockets 总数 (若 Timeout 发生,则为 0)
失败 - SOCKET_ERROR (呼叫 WSAGetLastError() 可得知原因)
说明: 使用者可利用此函式来检查 Sockets 是否有资料可被读取,或是有空间可以写入,或是有错误发生。

  Winsock 1.1 所提供的 select() 函式与 UNIX BSD 的 select() 函式,在参数的个数及资料型态上是一样,都有 nfds、readfds、writefds、exceptfds、及 timeout 五个参数;但是 Winsock 的 nfds 是没有作用的,有这个参数的目的,只是为了与 UNIX BSD 的 select() 函式一致。至於 readfds、writefds、exceptfds 同样是一组 sockets 的集合,所以您可以同时设定许多 sockets 的号码在这三个参数里面;当然这些 sockets 必须是属於您的这个应用程式所建立的。如果您设定的 socket 号码中有任一个不是属於您的这个程式的话,呼叫 select() 函式便会失败(错误码为 10038 WSAENOTSOCK)。

  Winsock 同样也提供了一些 macros 来让您设定或检查 readfds、writefds、exceptfds 的值,包括有:(其中 s 代表的是某一个 socket 的号码,set 代表的就 是 readfds、writefds 或 exceptfds)FD_ZERO(*set)
-- 将 set 的值清乾净 FD_SET(s, *set)
-- 将 s 加到 set 中 FD_CLR(s, *set)
-- 将 s 从 set 中删除 FD_ISSET(s, *set)
-- 检查 s 是否存在於 set 中

  读者们要知道参数 readfds、writefds、及 exceptfds 都是 「called by value-result」;而「called by value-result」的意思就是说,我们在将参数传给系统时,要先设启始值,并将这些参数的位址(address)告诉系统;而系统则会利用到这些值来做些运算或其他用途,最後并将结果再写回这些参数的位址中。因此这些参数的值在传入前和函式回返後,可能会不同;所以读者们每次呼叫 select() 前,对这些参数一定要重新设定它们的值。假设我们要检查 socket 1 和 2 目前是否可以用来传送资料,以及socket 3 是否有资料可读;我们不打算检查 sockets 是否有错误发生,所以 exceptfds 设为

  • 下一篇资讯: WINSOCK 1.1教程
  • 网学推荐

    免费论文

    原创论文

    浏览:
    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
    湘ICP备09003080号