- 1
- 0
- 约4.31万字
- 约 57页
- 2017-08-20 发布于浙江
- 举报
Socket模型详解的
Socket模型详解Winsock 的I/O操作:1、 两种I/O模式 阻塞模式:执行I/O操作完成前会一直进行等待,不会将控制权交给程序。套接字 默认为阻塞模式。可以通过多线程技术进行处理。 非阻塞模式:执行I/O操作时,Winsock函数会返回并交出控制权。这种模式使用 起来比较复杂,因为函数在没有运行完成就进行返回,会不断地返回 WSAEWOULDBLOCK错误。但功能强大。为了解决这个问题,提出了进行I/O操作的一些I/O模型,下面介绍最常见的三种:Windows Socket五种I/O模型——代码全攻略如果你想在Windows平台上构建服务器应用,那么I/O模型是你必须考虑的。Windows操作系统提供了选择(Select)、异步选择(WSAAsyncSelect)、事件选择(WSAEventSelect)、重叠I/O(Overlapped I/O)和完成端口(Completion Port)共五种I/O模型。每一种模型均适用于一种特定的应用场景。程序员应该对自己的应用需求非常明确,而且综合考虑到程序的扩展性和可移植性等因素,作出自己的选择。我会以一个回应反射式服务器(与《Windows网络编程》第八章一样)来介绍这五种I/O模型。我们假设客户端的代码如下(为代码直观,省去所有错误检查,以下同):#include WINSOCK2.H#include stdio.h#define SERVER_ADDRESS 48#define PORT ? ? ? ? ? 5150#define MSGSIZE ? ? ? ?1024#pragma comment(lib, ws2_32.lib)int main(){? WSADATA ? ? wsaData;? SOCKET ? ? ?sClient;? SOCKADDR_IN server;? char ? ? ? ?szMessage[MSGSIZE];? int ? ? ? ? ret;? ? // Initialize Windows socket library? WSAStartup(0x0202, wsaData);? // Create client socket? sClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);? // Connect to server? memset(server, 0, sizeof(SOCKADDR_IN));? server.sin_family = AF_INET;? server.sin_addr.S_un.S_addr = inet_addr(SERVER_ADDRESS);? server.sin_port = htons(PORT);? connect(sClient, (struct sockaddr *)server, sizeof(SOCKADDR_IN));? while (TRUE)? {? ? printf(Send:);? gets(szMessage);? ? // Send message? ? send(sClient, szMessage, strlen(szMessage), 0);? ? // Receive message? ? ret = recv(sClient, szMessage, MSGSIZE, 0);? ? szMessage[ret] = \0;? ? printf(Received [%d bytes]: %s\n, ret, szMessage);? }? // Clean up? closesocket(sClient);? WSACleanup();? return 0;}客户端所做的事情相当简单,创建套接字,连接服务器,然后不停的发送和接收数据。比较容易想到的一种服务器模型就是采用一个主线程,负责监听客户端的连接请求,当接收到某个客户端的连接请求后,创建一个专门用于和该客户端通信的套接字和一个辅助线程。以后该客户端和服务器的交互都在这个辅助线程内完成。这种方法比较直观,程序非常简单而且可移植性好,但是不能利用平台相关的特性。例如,如果连接数增多的时候(成千上万的连接),那么线程数成倍增长,操作系统忙于频繁的线程间切换,而且大部分线程在其生命周期内都是处于非活动状态的,这大大浪费了系统的资源。所以,如果你已经知道你的代码只会运行在Windows平台上,建议采用Winsock I/O模型。一.选择模型Select(选择)模型是Winsock中最常见的I/O模型。之所以称其为“Se
您可能关注的文档
- red hat 9 vi编辑器的.ppt
- RBS6201开站流程的.doc
- RedHat系统管理2的.ppt
- redis常用命令的.pdf
- Redis缓存技术的.doc
- Regional RBT Train的ing (布鲁姆分类学修改版).ppt
- rehat linux下面yum的安装(卸载)KDE和GNOME.doc
- Release模型——一值闹通用的软件开发模型.pdf
- rena清洗制绒设备培的训.ppt
- Review about LHM的.doc
- 陕西省西安高新一中学2024年八年级数学第一学期期末监测试题含解析.doc
- 2025年智慧物流十年创新:无人驾驶与物流科技行业报告.docx
- 2025年消费电子MEMS传感器产业化十年趋势报告.docx
- 2025年化工新材料原材料价格趋势报告.docx
- 2025年酒类包装设计个性化与品牌溢价分析报告.docx
- 2025年体育赛事全球赛事本土化发展策略报告.docx
- 2025年吉林省长春市榆树市高三模拟考试(一)生物试题试卷含解析.doc
- 2025年餐饮外卖消费者画像分析报告.docx
- 黑龙江省哈尔滨市五常市达标名校2025届初三年级第二次四校联考语文试题含解析.doc
- 中国碳中和十年2025影响:房地产行业报告.docx
最近下载
- 2025-2026学年重庆市江津实验中学、田家炳中学、李市中学、白沙中学等金砖六校九年级(上)期末化学模拟试卷(含答案).pdf VIP
- 阿特拉斯•科普柯 冷冻式干燥机.pdf VIP
- 重庆市九龙坡区2024-2025学年九年级上学期期末考试数学试题(含答案与解析).pdf VIP
- 江苏省盐城七校联考2025-2026学年高三上学期阶段检测语文试题及答案.docx VIP
- 浙江省杭州市富阳区2023-2024学年三年级上学期数学期末试卷.docx VIP
- TXFQC-合成橡胶消防水带.pdf VIP
- 重庆市九龙坡区渝高教育集团2024-2025学年九年级上学期期末考试物理试题(含答案).pdf VIP
- 精品解析:2024-2025学年浙江省杭州市富阳区人教版四年级上册期末考试数学试卷(原卷版).docx VIP
- 2025安徽高级档案职称综合试题及答案.docx VIP
- 社工助力乡村振兴—农村社会工作网络培训课程答案.pdf VIP
原创力文档

文档评论(0)