client端的4次send()
加上
Thread.sleep(200);

解决方案 »

  1.   

    当然是全接收了,因为你采用的是TCP,TCP的消息缓冲区是不分界限的,要想分次接收,必须加以控制才行,如果你采用UDP就不会出现上述现象
    以下是TCP接收示例代码:
    Byte [] dataLen = new Byte[ dlByteLen ];//dlByteLen是由你决定数字的长度是事先定义好的
    sock.Receive( dataLen , 0 , dlByteLen , SocketFlags.None);
    //转换成字符串
    string count = Encoding.ASCII.GetString( dataLen );
    //在发送数据长度时要把数字串最后一位Byte设为'\0'
    //例如:"123" ,发送的是 1 ,2 ,3,\0.... 
    int nLeft = Convert.ToInt32( count) ,nRet = 0 , nIndex = 0;

    //接受数据容器
    Byte [] ret = new Byte[ nLeft ] ;
    while ( nLeft > 0 )
    {
    nRet    = sock.Receive( ret , nIndex , nLeft , SocketFlags.None );
    nLeft   -= nRet;
    nIndex  += nRet;

      

  2.   

    tcp协议的原理!要严格控制收发次数,那只能根据一次收发的长度控制了,不然的话换udp协议也可以。
      

  3.   

    手头没又UDP的例子,别人给了个TCP的例子,我帮着改改,虽然俺也不行,慢慢研究贝,回去试试SLEEP的方法,兴许有戏。
      

  4.   

    楼上几位谢谢了,尤其是sleep(200),我已经实现了,下次再做的时候一定要控制send次数,这次就这样吧,udp也要学一下了。