求教高手关于大数据量传输的解决方案 需要实现一个SOCKET TCP通信Server端会向Client每秒发送300个数据包,数据包格式是自定义的,大小固定30个字节Client接收数据的时候,前面接收的数据包都是正确的,但后面收到的包出现数据错误的现象把Server发送速度降低到每秒发送150个数据包都OK没问题原来以为是Client接收缓存不够大,但改大缓存后每秒发300个包还是有问题,请问各位大虾这是什么原因造成的,有什么好的解决方法? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 在send时,把包合并,按照64K为一个单位发。接收时,也按照64K单位recv,不够64K,有多少接多少。收取够,64K,再检查包你的协议,如果不是应答式,按照上面说的。 不错的解决办法,照你的方法做确实可以解决问题,但很想知道发送速度太快造成数据包错误的原因是什么,是不是还存在什么隐患?我SOCKET采用的是阻塞方式,专门开了一个线程接收数据 客户端太快,如果服务端设计的不好,就会出现数据粘包,几个包被一起收了,而分包出现问题。主要还是所使用的recv模型的问题,阻塞方式没看到你的代码,不好确定具体原因。 1:每个包中加个长度字段。2:你确认send都发送出去了吗?如果send的次数多,或有错误代码的,可能是socket系统缓冲区满,无法继续发送数据。 参考现成例子Http协议。Http会在发送前加一个totalLength,和一个tag。totalLength代表整个包的长度tag代表是哪个包,rev时,首先建立缓冲池,放入tag包,if totalLength== 缓冲区池全有tag length总和,则进行业务处理,相对于网页就是显示,else 继续wait,注意要给每个tag加上timeout.原因:底层收发数据时才不管你顺序问题捏,先发tag1包再发tag2,接收时是有可能先收到分组tag1包分组offset 1然后收tag2分组 offset1这样一来,不错就见鬼了。所以在会话层以上必须建立自己的标志。 对了,这个问题叫我想起一个超级风暴攻击,泪滴,泪滴就像LZ说的那样,在瞬间发送多个分组包给服务器,使得服务器疲于应付分组带来的等待,最终download,想比泪滴,DDOS就像是个好孩子,呵呵。 请问一个ADO中获得数据的数据转换成各种类型的数据 请大虾帮忙指点一下这段程序为什么报错应该如何改进,谢谢! 求VC使用CAsyncSocket编程的实例 VC中_ConnectionPtr声明的连接对象能否回退? Atl写的控件不支持TAB等光标控制键,怎么样才能让他们支持他(没使用MFC) 由侯捷和潘爱民对自己译作的不同态度明确大陆的技术书籍翻译水平差距!!! 怎么把一个窗体显示的颜色限制在一个范围内? 关于串口,大家一起来讨论!!是深入剖析串口通信的基础! 网络编程的高手们,看看这只菜鸟吧!! 一个文件独占打开删除的问题 线程函数问题 为什么我的WriteFile()文件写入函数是错的
主要还是所使用的recv模型的问题,阻塞方式没看到你的代码,不好确定具体原因。
2:你确认send都发送出去了吗?如果send的次数多,或有错误代码的,可能是socket系统缓冲区满,无法继续发送数据。
tag代表是哪个包,rev时,首先建立缓冲池,放入tag包,if totalLength== 缓冲区池全有tag length总和,则进行业务处理,相对于网页就是显示,else 继续wait,注意要给每个tag加上timeout.原因:底层收发数据时才不管你顺序问题捏,先发tag1包再发tag2,接收时是有可能先收到分组tag1包分组offset 1然后收tag2分组 offset1这样一来,不错就见鬼了。所以在会话层以上必须建立自己的标志。