根本不是丢包,而是楼主不了解TCP通讯的特点,它是基于流的,所以接收数据的时候,有可能不是一下子收全的,而是分批到达,楼主的代码没有这方面的处理.

解决方案 »

  1.   

    同意 #1 楼。发送端可能分3次发送 2000、1000、500 个字节,而接收端可能分4次接收到 500、1800、700、500 个字节。因为TCP数据发送是一个非常复杂的过程,为了高效同时又不滥占带宽,接收端你看到的结果会按照windows的规则自动合并或者分包。只要你使用 TCP,那么你就应该自定义消息信令格式,接收端可以知道消息什么时候结束。例如 HTTP (当然,这也是基于TCP的)消息头和消息体分别是以两个连续的“换行回车”结束的。接收端需要在分解到消息结束标志时,才可能去执行什么 DataReceived.BeginInvoke 代码。不能提前去丢数据输出。