当前Windows支持的各种Socket I/O模型,主要的模型如下:
一:select模型
二:WSAAsyncSelect模型
三:WSAEventSelect模型
四:Overlapped I/O 事件通知模型
五:Overlapped I/O 完成例程模型
六:IOCP模型
其中本文主要讲解WSAAsyncSelect模型,以一种无线通信信令模拟软件的客户端程序为例子,模拟软件是服务器软件和客户端软件组成,采用TCP通信。对于客户端程序来说,由于传输的数据量不大,只开启一个socket与服务器端进行通信,可以采用WSAAsyncSelect模型,这样可以避免采用线程方式的同步问题。WSAAsyncSelect模型是Windows下最简单易用的一种Socket I/O模型。利用这个模型,应用程序可在一个套接字上,接收以Windows消息为基础的网络事件通知。其优缺点如下:
优点:可在系统开销不大的情况下同时处理许多连接。
缺点:即使用不需要窗口(如服务器,控制台)它也不得不额外使用一个窗口。同时如果处理成千上万套接字的所有事件,性能可想而知。
MFC的CSocket所使用的正是这种事件通知模型,要想使用WSAAsyncSelect模型,在应用程序中,首先必须用CreateWindow