解决方案 »

  1.   

    做服务端还是客户端异步编程 跟 连接几个IP没关系      连接一个IP也可以异步编程
      

  2.   

    做客户端的话   使用异步编程  大概这样子:socket.connect
    socket.BeginReceive(...,...,...,OnReceive,...);  //开始异步接收数据private void OnReceive(IAsyncResult ar)  //回调方法
    {
             int realRec = socket.EndReceive();  //
             socket.BeginReceive(...,...,...,OnReceive,...);    //马上再开启下一次异步接收    这相当于一个while循环
             //接下来  处理本次接收的数据
           
    }异步编程一般比直接使用多线程的性能要高   因为异步编程时   是使用系统维护的线程池中的线程
      

  3.   


    哦,我用的TCP/IP协议的TCPclient类,没用socket类。我要想连多个IP,是不是得有多个回调函数
    socket.BeginReceive(...,...,...,OnReceive1,...);  //开始异步接收数据
    socket.BeginReceive(...,...,...,OnReceive2,...);  //开始异步接收数据
    socket.BeginReceive(...,...,...,OnReceive3,...);  //开始异步接收数据
    .
      

  4.   

    上位机socket别用多线程  千万别用.使用异步 是不错的选择 比如beginXXX beginOOO但是前提是你下位机很少的情况下..如果几千几万几十万几百万这样的数量,建议你还是选择一个比较好的socket框架吧,,前段时间在论坛有人开源了一套 感觉还不错 调用使用都很方便 效率也是很高.. 不如你去搜搜下.
      

  5.   


    哦,我用的TCP/IP协议的TCPclient类,没用socket类。我要想连多个IP,是不是得有多个回调函数
    socket.BeginReceive(...,...,...,OnReceive1,...);  //开始异步接收数据
    socket.BeginReceive(...,...,...,OnReceive2,...);  //开始异步接收数据
    socket.BeginReceive(...,...,...,OnReceive3,...);  //开始异步接收数据
    .连接多个服务端  使用不同的socket   就会有多个Begin***
      

  6.   

    建议上位机中的socket使用asyncsocket,替代使用beginsocket,asyncsocket据说使用了iocp的方式,还是据说不清楚beginsocket是否使用了iocp,并且async用起来没有begin那么浪费内存。上楼说开源了一套,说的是不是我的那个??就算不是我的,我也给我的资源做个广告啦··http://download.csdn.net/detail/jy251/7057839
      

  7.   


    自.Net 2.0之后就采用了IOCP模型,windows平台是在winsock2中引进的
    你可以去看一下.Net的源码,封装的内部方法Import的正是ws2_32.dll不过在开发对性能要求很高的服务端时,还是建议使用SocketAsyncEventArgs
    它与begin/End这种.Net传统异步模型的区别在于,不需要为每一个异步操作分配一个IAsyncResult对象保持上下文。
    而SocketAsyncEventArgs则是事件驱动的,它的异步操作是通过Operation属性,来异步调用相应的方法,触发相应的事件。
    并且事件参数是可以重用的。在内存和句柄数上都有优势