发是立刻发,还是放在缓冲区,达到一定值再发?
收时是否先放在缓冲区,等到Winsock来及处理时再从缓冲区读出,
我测过发8k,收5k+3k,就是有可能一次数据在收时被截断,
而且截断的地方任意,有没有什么好方法来处理?
是否可以利用类似“传输数据块类型|数据块长度”来处理,
那么有没有可能正好在“传输数据块类型”或“数据块长度”处截断,
这样处理岂不是很复杂?

解决方案 »

  1.   

    发就是交给tcp层,由tcp层来保证发到接收方的tcp层,然后再由应用程序从tcp层接收,所以你一次发送8k数据,它可能把这个大包分成几次发送,同样,如果你一次发100个字节,它可能把好几次的数据凑成一个大的包发送。
    另外,如果出现异常情况,导致连接中断,系统缓冲中的数据可能丢失,这时,你再发或关闭套接字时会产生错误。因此当出现这种情况而重新连接再发时,不能依据发送方发送呢多少数据,而是要依据接收方收到了多少数据。
      

  2.   

    TCP/IP协议。
    发是立刻发
    收时是否先放在缓冲区
    解决方法:
    把所有数据转成二进制进行接发。
    每次8K一个字节也不会少。