设为首页 加入收藏

TOP

16.3.2 Windows Sockets编程机理
2013-10-07 13:10:36 来源: 作者: 【 】 浏览:65
Tags:16.3.2 Windows Sockets 编程 机理

16.3.2  Windows Sockets编程(www.cppentry.com)机理

使用Windows Socket编程(www.cppentry.com)时,需要了解几种编程(www.cppentry.com)方式,理解这几种编程(www.cppentry.com)方式的机理,从而能够根据实际情况编写适合系统需求的程序。主要包括以下几个方面:阻塞操作、非阻塞操作、异步方式、数据收发。

Windows Socket中最简单的方式就是非阻塞操作,这也是Windows套接字的默认方式。在此种方式下,所有的I/O操作都会阻塞,直到操作完全执行完毕。因此,任何线程在同一时间只能执行一个读写操作。如果线程正在执行接收操作,而又没有数据到达,则线程会阻塞直到有数据到达。虽然此种方式操作最简单,但是并不是最有效的方式。

与阻塞操作相反,非阻塞读写操作在执行操作后立即返回,并返回错误代码为WSAEWOULDBLOCK表示操作还没有完全执行完。在此种机制下,需要处理当操作执行完成后的代码,在Windows Socket中使用网络事件通知的方式实现。用户可以使用WSPSelect()函数注册感兴趣的事件,则当接收到相应的网络事件,系统会为程序发送事件通知,程序可以再根据自己的需要进行数据处理。

重叠读写操作,就是同时执行多个读写操作。在Windows Socket中使用带有WSA_FLAG_OVERLAPPED选项的WSPSocket()函数创建支持重叠读写操作的套接字。客户端使用WSPRecv()函数或WSPRecvFrom()函数提供接收数据的缓冲区。如果同时提供一个或多个缓冲区,则数据被放置到其中任何一个用户缓冲区中。数据发送端则使用WSPSend()函数或WSPSendTo()函数提供发送数据的缓冲区。重叠读写操作都会立即返回,返回0表示读写操作立即完成,并且使用事件对象或回调函数通知程序是否已经成功发送或接收,返回值WSA_IO_PENDING表示读写操作成功,但是还没有执行完毕。

Windows Socket中使用WSPSend()函数和WSPSendTo()函数完成套接字数据发送功能。使用WSPRecv()函数和WSPRecvFrom()函数完成数据接收功能。并且这些函数可以实现自动增加数据包包头和自动减去数据包包头的功能,简化数据解析的过程。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇10.5.5 查找、替换对话框实例 下一篇10.5.6 打印对话框实例

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: