Socket基础八:网络IO模型的应用
作者:刘磊 2020.4.27
参考书目:《Windows网络编程》刘琰等著
一、实验目的
1)掌握WindowsI/O操作的基本原理。
2)掌握阻塞模型、非阻塞模型、select 模型、WSAAsyncSelect 模型、WSAEventSelect 模型、重叠I/O模型和完成端口模型的程序设计方法。
3)熟悉各种模型的优缺点,培养程序员在各种应用场景下正确选择I/O模型的意识和能力。
4)锻炼程序员在网络应用程序设计过程中检查错误和排除错误的能力。
二、网络中的 /O操作
使用网络设备进行数据的发送与接收面临着与传统I0操作类似的环节,网络操作经常会面临IO事件的等待,这些等待事件大致分为以下几类:
●等待输入操作: 等待网络中有数据可被接收。
●等待输出操作:等待套接字实现中有足够的缓冲区保存待发送的数据。
●等待连接请求:等待有新的客户端建立连接或对等方断开连接。
●等待连接响应: 等待服务器对连接的响应。
●等待异常:等待网络连接异常或有带外数据可被接收。
三、服务器的基本执行步骤如下:
1)引用头文件。
2)创建数据报套接字。
3)捆绑服务器的指定端口到套接字。
4)设置端口可重用。
5)创建流式套接字。
6)捆绑服务器的指定端口到套接字。
7)设置等待网络事件的套接字。
8)调用select()函数等待网络事件。
9)根据返回的可读套接字进行相应操作,如果是使用TCP的监听套接字,则接受连接,)根据返回的可读套接字进行相应操作,如果是使用TCP的监听套接字,则接受连接,
10)回到步骤8)。
11)如果终止条件到,则关闭套接字,释放资源,终止程序。
四、程序运行简介
在IO复用模型下,套接字以阻塞模式运行,但是仍然可以用单个线程达到多线程并发执行的效果,以上代码用select)函数对一一个监听套接字、 多个连接套接字和一个数据报套接字上等待的网络事件进行同时监控,并在任何满足I0条件的套接字返回时,根据套接字的类型分别进行处理。