发是立刻发,还是放在缓冲区,达到一定值再发?
收时是否先放在缓冲区,等到Winsock来及处理时再从缓冲区读出,
我测过发8k,收5k+3k,就是有可能一次数据在收时被截断,
而且截断的地方任意,有没有什么好方法来处理?
是否可以利用类似“传输数据块类型|数据块长度”来处理,
那么有没有可能正好在“传输数据块类型”或“数据块长度”处截断,
这样处理岂不是很复杂?
收时是否先放在缓冲区,等到Winsock来及处理时再从缓冲区读出,
我测过发8k,收5k+3k,就是有可能一次数据在收时被截断,
而且截断的地方任意,有没有什么好方法来处理?
是否可以利用类似“传输数据块类型|数据块长度”来处理,
那么有没有可能正好在“传输数据块类型”或“数据块长度”处截断,
这样处理岂不是很复杂?
另外,如果出现异常情况,导致连接中断,系统缓冲中的数据可能丢失,这时,你再发或关闭套接字时会产生错误。因此当出现这种情况而重新连接再发时,不能依据发送方发送呢多少数据,而是要依据接收方收到了多少数据。
发是立刻发
收时是否先放在缓冲区
解决方法:
把所有数据转成二进制进行接发。
每次8K一个字节也不会少。