SOCKET编程有阻塞,非阻塞两部分,按模型又可分为SELECT,事件,消息,IOCP等,我想清楚的是他们的具体的应用范围,适应的并发量(即同时访问的客户端),各有哪种优势和不足。
C++BUILDER中的TSERVERSOCKET服务器端的阻塞和非阻塞是采用的什么机制,是把哪些东西封装了起来。
LINUX的如果有知道也希望说说,当然,希望大家推荐一些比较好了的这方面的书籍。现在公司有一款产品是用C#的异步开发的,结果现在并发访问二百个左右的SOCKET就经常有大约一半左右的数据丢失,虽然不肯定是模型不对,但现在对这个还是有怀疑的。一般情况下,多线程阻塞情况下,理论上可以有多少SOCKET并发,特别是数据量通信比较大时,实际情况呢,非阻塞呢,IOCP呢,网上和书上一般就说,IOCP管理成百上千个,太模糊了。非常感谢大家。

解决方案 »

  1.   

    C#的异步模式,实际采用的是iocp,200个左右的连接不会有任何问题(我曾做过的一个项目有几千个连接)。丢数据不是这个模型问题,应该是程序问题。
      

  2.   

    建议楼主看下Windows编程原理和Tcp/ip协议,你会找到自己的答案
      

  3.   

    windows网络编程  iocp支持上万个也没问题
      

  4.   

    IOCP用于成千上万,海量通信,如某些游戏的服务器。如不是上万个的连接,用事件选择模型模型就可以了   
    可以看一下《windows网络通信与程序设计》这本书,里面对各种通信模型都详细介绍,网上有代码下载
      

  5.   

    用完成端口开发大响应规模的Winsock应用程序
    http://www.vckbase.com/document/viewdoc/?id=1732
      

  6.   

    IOCP是管理大量连接小数据通讯的SOCKET模型,你说的200个左右的连接,但是不知道你的每次发送的数据量有多大??频率多少??其实TCP是一般情况下是不会丢失数据的,我觉得是你程序在接收数据的时候有问题,你可以先用抓包看下包是否已经到达本机.
      

  7.   

    “C++BUILDER中的TSERVERSOCKET服务器端的阻塞和非阻塞是采用的什么机制,是把哪些东西封装了起来”
    TSERVERSOCKET组件是采用了WSAAsyncSelect模型的;200多个用TSERVERSOCKET绰绰有余了
      

  8.   

    《Visual C++网络通信开发入门与编程实践》适合基础的讲解。
      

  9.   

    c#的TcpListener clienter控件很简单的.. 是同步阻塞的..所以还是用异步的吧..而且要高效的异步模式.还有通讯架构.设计的不好,一样io效率不行啊. C#的iocp有例子的.网上找找封装好的.