TCP无保护消息边界的解决 本帖最后由 liangtianheng 于 2014-06-17 14:16:05 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 没错,书上全部都写反了.按这个代码,size永远为0.不知道这本书是哪个脑残儿童写的,反正我没看过.既然代码能够如此错误百出,原理也不见得都是正确的.果断弃书吧. while (dataleft > 0) { //接收数据 recv = s.Receive(msg, offset, dataleft, 0); if (recv == 0) { break; } offset += recv; dataleft -= recv; } 这里感觉完全不对啊.两次Receive之间不需要sleep?怎么知道此周期没有接收完毕的数据,下个周期一定能够到达呢?如果默认发送方没有延时的将所有数据都送到缓冲区里了,那应该能够一次性获取到所有需要的数据了吧... 反正我自己测试时根本没用分组接收再重新整合的过程.客户端发送100W字节,服务端就直接接收到100W字节.而不是分成好多次去Receive tcp消息为何要边界?本身tcp就是有边界的!tcp是滑动窗口传输的,你根本没必要去监测那些消息是不是完整的。除非你是以太网上传输串口数据,这个也只是你自己的业务逻辑问题,与tcp没啥关系 学生刚学c#问个低级问题 winfrom开发中简单小问题解决方案. 如何在textbox框里设置快捷键?? Invoke机制?界面卡死原因 用C#实现把图片生成AVI,如何实现?有没有高手指点一二 如何通过.net实现不下载文件,而获取待下载文件的大小等信息 如何在程序中使用聚合函数,比如MAX等。 哪儿有C#一般函数说明下载? 转换的问题 谁教我一下nBASS(一套用于.NET的文件播放类)这个东西怎么用?谢谢 C# 中关于使用cmd命令行 TCP通信 加密 和 客户端校验
不知道这本书是哪个脑残儿童写的,反正我没看过.既然代码能够如此错误百出,原理也不见得都是正确的.
果断弃书吧.
while (dataleft > 0) { //接收数据 recv = s.Receive(msg, offset, dataleft, 0); if (recv == 0) { break; } offset += recv; dataleft -= recv; } 这里感觉完全不对啊.
两次Receive之间不需要sleep?怎么知道此周期没有接收完毕的数据,下个周期一定能够到达呢?
如果默认发送方没有延时的将所有数据都送到缓冲区里了,
那应该能够一次性获取到所有需要的数据了吧...
客户端发送100W字节,服务端就直接接收到100W字节.
而不是分成好多次去Receive