WinSock是BSD Socket在Windows上实现, 它在Windows上引入了基于事件机制和消息机制的I/O模型, 分别是WSAEventSelect与WSAAsyncSelect, 另外还有Overlapped I/O与CompletionPort; 同时也有UNIX/LINUX上常用的select。 
    面对这么多的I/O模型,开发客户端且有窗口的话,我会选择WSAAsyncSelect 模型,因为它是基于窗口消息机制的;基于控制台的话,我会选择select模型。如果开发的是服务器,我还是用select模型,容易管理多个套接字;对于CompletionPort到目前为止没有做过,因为没有做过要求性能特高的服务器。
    另外,大家对于WinSock与MFC的CASyncSocket、CSocekt是怎么选择的?也就是说什么时候用WinSock, 什么时候用MFC Socket? 
    当开发的是一个基于MFC DOC/VIEW的客户端应用,我会用CSocket;用CSocket的另外一个原因是刚开始学的时候是用它。
    CAsyncSock是对WinSock WSAAsyncSelect的封装,到目前为止没用过它。
    以上我个人的选择,欢迎大家畅所欲言!!

解决方案 »

  1.   

    如果用MFC,我会选用CASyncSocket;
    用api的话,小数量的话用WSAEventSelect不错,大了只能用iocp了。
      

  2.   

    既然都用的mfc,那就用用mfc的socket类就行了
    你是做客户端又有窗口,当然应该选择WSAEventSelect
    iocp就没有必要了
      

  3.   

    感谢楼两位的回答, 能否说当你们作出选择的时候的理由吗? 也就是说为什么不考虑其它I/O模型呢? 用WinSock的时候为什么不选择MFC Socket呢?
      

  4.   

    如果开发的一个简单的通信程序是基于MFC的话, 我还是倾向于在MFC中直接用WinSock. 因为我感觉用WinSock清楚地知道程序的流程. 至于开发的效率觉得差不多.
      

  5.   

    我开发了一个对于时间性能要求特别高的套接字程序,不能够依靠与消息通知机制,要使用socket api做,可以达到毫秒级的响应。