Winsocket入门教程二:非阻塞式服务器和客户端程序(TCP).doc
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
Winsocket入门教程二:非阻塞式服务器和客户端程序(TCP)HYPERLINK"JavaScript:d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(saveit=window.open('http://wz.csdn.net/storeit.aspx?t='+escape(d.title)+'&u='+escape(d.locatio 非阻塞式Winsock服务器和客户端程序设计是网络编程中的一种高效策略,它解决了阻塞式编程中因等待I/O操作完成而导致的程序暂停问题。本篇教程将深入讲解如何构建非阻塞TCP服务器和客户端。 理解非阻塞模式的概念至关重要。在阻塞模式下,当程序执行如`accept`、`read`或`write`等操作时,如果这些操作没有立即完成,程序会一直等待,直到操作完成。而非阻塞模式则不同,它允许程序在等待I/O操作完成时设定一个超时时间,即使操作未完成,程序也会在超时后继续执行其他任务,这样提高了程序的响应性和效率。 要实现非阻塞模式,我们需要使用`ioctlsocket`函数来改变套接字的属性。`ioctlsocket(s, FIONBIO, argp)`这里的`s`是套接字句柄,`FIONBIO`是命令常量,用于设置非阻塞模式,`argp`传入的值如果是1,则设置为非阻塞,0则恢复为阻塞。 接着,`select`函数在非阻塞模式中扮演关键角色。`select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, const struct timeval *timeout)`函数允许程序同时监控多个套接字的读、写和异常事件。`nfds`通常为最大套接字描述符加1,`readfds`、`writefds`和`exceptfds`是三个套接字集合,分别用于检测可读、可写和异常情况。`timeout`参数决定函数等待的最长时间,NULL表示无限等待,0表示立即返回。 在使用`select`前,需通过`FD_SET`、`FD_CLR`、`FD_ZERO`和`FD_ISSET`宏来管理`fd_set`集合。例如,`FD_SET(s, *set)`将套接字`s`添加到集合`set`,`FD_CLR(s, *set)`则从集合中移除。`FD_ISSET(s, *set)`检查套接字`s`是否在集合中有信号,`FD_ZERO(*set)`清空集合。 `select`函数的三个集合参数各有特定用途: - `readfds`:当套接字可读时,可能是因为有新的连接请求(对于服务器),或者接收到数据(对于客户端)。 - `writefds`:套接字可写时,意味着连接成功(客户端)或可发送数据(服务器和客户端)。 - `exceptfds`:用于检测异常情况,如连接失败或带外数据到达。 在构建非阻塞服务器时,服务器会使用`select`监控监听套接字,一旦有新的连接请求,就可以在不阻塞其他处理任务的情况下处理。客户端同样利用`select`来检查连接状态和数据传输。 示例程序通常会包含以下步骤: 1. 创建并设置套接字为非阻塞模式。 2. 使用`select`监控套接字集合,根据返回值判断是否有活动套接字。 3. 对于活动套接字,执行相应的读写操作,处理连接或数据传输。 4. 如果操作需要时间,但不想阻塞,可以设置`timeout`参数。 5. 循环处理,持续监控套接字状态。 通过这种方式,非阻塞服务器和客户端可以高效地处理多个并发连接,避免了因线程频繁创建和销毁带来的资源消耗,提升了系统的稳定性和性能。 非阻塞模式虽然高效,但也有其挑战,比如需要更复杂的编程逻辑来处理异步事件,并且需要正确处理`EWOULDBLOCK`这样的错误。不过,对于高性能的网络应用,非阻塞模式无疑是一种值得掌握的技术。
剩余16页未读,继续阅读
- 粉丝: 98
- 资源: 2万+
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Matlab simulink 双馈风机超速减载变桨调频,DFIG调频,一次调频,超速减载,变桨下垂控制,IEEE9节点系统,风电并网,三机九节点系统,对比了转子动能,下垂控制和惯性控制,超速减载,变
- wince嵌入式系统工具合集,包含常用软件游戏,计算器,我的电脑、播放器,记事本等
- 预计2030年全球猫砂市场规模将达到67.5亿美元
- 预计2030年全球皮革化学品市场规模将达到46.1亿美元
- Python毕业设计基于Django框架开发的自动化测试用例管理平台源码+文档说明+数据库
- MMC渝鄂高频振荡,根据渝鄂真实参数调校,振荡频率1195Hz
- 预计2030年全球平板玻璃市场规模将达到1409.6亿美元
- 儿童兴趣班系统-系统分为前端和后端,提供了账号管理、课程管理、套餐管理等功能,同时支持个人资料修改和课程购买 (Java+mysql+html+css+js等等)
- 国内气象自动站站点数据
- PMSM永磁同步电机参数辨识仿真,适用于表贴式,内嵌式永磁同步电机: 辨识内容: ① 定子电阻; ② DQ电感辨识(脉冲电压法); ③ 转子磁链辨识; 上述算法,是在实践工程中提炼出的算法,无复杂的矩
- 计算机网络期末复习题集锦
- 基于fpga的DES加解密算法 利uart串接收PC端发送的数据,根据数据类型,对数据进DES加密或者解密处理 将处理的数据通过uart传回PC端 可以通过上位机对64位密钥进行设置,另外加解密
- DynamicLakePro for Mac v1.4.8.3
- 完结16章React18内核探秘:手写React高质量源码迈向高阶开发课程
- html+css+js网页设计 体育 体育强国5个页面
- SiteSucker Pro for Mac v5.6