本帖最后由 liangtianheng 于 2014-06-17 14:16:05 编辑

解决方案 »

  1.   

    没错,书上全部都写反了.按这个代码,size永远为0.
    不知道这本书是哪个脑残儿童写的,反正我没看过.既然代码能够如此错误百出,原理也不见得都是正确的.
    果断弃书吧.
      

  2.   


    while (dataleft > 0)              {                 //接收数据                  recv = s.Receive(msg, offset, dataleft, 0);                  if (recv == 0)                  {                      break;                  }                  offset += recv;                  dataleft -= recv;             } 这里感觉完全不对啊.
    两次Receive之间不需要sleep?怎么知道此周期没有接收完毕的数据,下个周期一定能够到达呢?
    如果默认发送方没有延时的将所有数据都送到缓冲区里了,
    那应该能够一次性获取到所有需要的数据了吧...
      

  3.   

    反正我自己测试时根本没用分组接收再重新整合的过程.
    客户端发送100W字节,服务端就直接接收到100W字节.
    而不是分成好多次去Receive
      

  4.   

    tcp消息为何要边界?本身tcp就是有边界的!tcp是滑动窗口传输的,你根本没必要去监测那些消息是不是完整的。除非你是以太网上传输串口数据,这个也只是你自己的业务逻辑问题,与tcp没啥关系