WEB开发网
开发学院软件开发VC 深入CSocket编程之阻塞和非阻塞模式 阅读

深入CSocket编程之阻塞和非阻塞模式

 2010-07-20 20:45:53 来源:WEB开发网   
核心提示:结束语Server 端 socket 处于阻塞调用模式下,它必须在一个新创建的线程中工作,深入CSocket编程之阻塞和非阻塞模式(3),防止主线程被阻塞,当有多个 Client 端 socket 与 Server 端 socket 连接及通信时,它是基于阻塞模式的 Client/Server 端网络程序典型示例,ht

结束语

Server 端 socket 处于阻塞调用模式下,它必须在一个新创建的线程中工作,防止主线程被阻塞。

当有多个 Client 端 socket 与 Server 端 socket 连接及通信时, Server 端采用阻塞模式就显得不适合了,应该采用非阻塞模式 , 利用 socket 事件 的消息机制来接受多个 Client 端 socket 的连接请求并进行通信。

在非阻塞模式下,利用 CSocketWnd 作为所有 sockets 的消息池,是实现 socket 事件 的消息机制的关键技术。文中存在用词不妥和可能存在的技术问题,请大家原谅,也请批评指正,谢谢!

注:

当前模块状态——用于保存当前线程和模块状态的一个结构,可以通过 AfxGetThreadModule() 获得。AFX_MODULE_THREAD_STATE 在 CSocket 重新定义为 _AFX_SOCK_THREAD_STATE 。

socket 类型——在 TCP/IP 协议中, Client/Server 网络程序采用 TCP 协议:即 socket 类型为 SOCK_STREAM ,它是可靠的连接方式。在这里不采用 UDP 协议:即 socket 类型为 SOCK_DGRAM ,它是不可靠的连接方式。

源代码参考:

http://www.codeproject.com/internet/SocketFileTransfer.asp 采用 CSocket 类编写的基于 Client/Server 的网络文件传输程序,它是基于阻塞模式的 Client/Server 端网络程序典型示例。

http://www.codeguru.com/Cpp/I-N/network/messaging/article.php/c5453 采用 CSocket 类编写的基于 Client/Server 的网络聊天程序,它是基于非阻塞模式的 Client/Server 端网络程序典型示例。

参考资料:

Microsoft MSDN Library – January 2001

《Windows 网络编程》 清华大学出版社

上一页  1 2 3 

Tags:深入 CSocket 编程

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接