社区
网络编程
帖子详情
求教高手关于大数据量传输的解决方案
sesgli
2009-12-26 12:02:20
需要实现一个SOCKET TCP通信
Server端会向Client每秒发送300个数据包,数据包格式是自定义的,大小固定30个字节
Client接收数据的时候,前面接收的数据包都是正确的,但后面收到的包出现数据错误的现象
把Server发送速度降低到每秒发送150个数据包都OK没问题
原来以为是Client接收缓存不够大,但改大缓存后每秒发300个包还是有问题,
请问各位大虾这是什么原因造成的,有什么好的解决方法?
...全文
327
10
打赏
收藏
求教高手关于大数据量传输的解决方案
需要实现一个SOCKET TCP通信 Server端会向Client每秒发送300个数据包,数据包格式是自定义的,大小固定30个字节 Client接收数据的时候,前面接收的数据包都是正确的,但后面收到的包出现数据错误的现象 把Server发送速度降低到每秒发送150个数据包都OK没问题 原来以为是Client接收缓存不够大,但改大缓存后每秒发300个包还是有问题, 请问各位大虾这是什么原因造成的,有什么好的解决方法?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
tjzs007
2009-12-31
打赏
举报
回复
对了,这个问题叫我想起一个超级风暴攻击,泪滴,泪滴就像LZ说的那样,在瞬间发送多个分组包给服务器,使得服务器疲于应付分组带来的等待,最终download,想比泪滴,DDOS就像是个好孩子,呵呵。
tjzs007
2009-12-31
打赏
举报
回复
参考现成例子Http协议。Http会在发送前加一个totalLength,和一个tag。totalLength代表整个包的长度
tag代表是哪个包,rev时,首先建立缓冲池,放入tag包,if totalLength== 缓冲区池全有tag length总和,则进行业务处理,相对于网页就是显示,else 继续wait,注意要给每个tag加上timeout.
原因:底层收发数据时才不管你顺序问题捏,先发tag1包再发tag2,接收时是有可能先收到分组tag1包分组offset 1然后收tag2分组 offset1这样一来,不错就见鬼了。所以在会话层以上必须建立自己的标志。
red-fly
2009-12-31
打赏
举报
回复
最简单的就是,把几个包合并起来一起发送
如果查检当前的错误,可以在当前的状态下,把发送的内容逐个打印出来,在接收端,也把收到的内容逐个打印出来,看能不能对得上,如果对不上,那就有奇怪的问题了。如果对得上,那就要看是发送端发送的不对,还是接收端拆包不对
接收端不能按照每次都是30个字节来解析,而且要考虑到接收一半或者一个半包时的情况,否则,肯定会出问题的。
按照你300次,一次30个字节,数据量很小的,才10K不到,楼主还声称大数据量,想忽悠人吧
sesgli
2009-12-31
打赏
举报
回复
每个包都有包头的,包头中有记录包的长度,出现粘包以后就是解析包头的时候得到的包长度不对了
请问粘包是阻塞模式才会出现吗?其它模式会不会也有这样的问题?
vincent_1011
2009-12-30
打赏
举报
回复
不粘包是不可能吧,除非像你那样改发送间隔时间加长?
lijianli9
2009-12-30
打赏
举报
回复
1:每个包中加个长度字段。
2:你确认send都发送出去了吗?如果send的次数多,或有错误代码的,可能是socket系统缓冲区满,无法继续发送数据。
sesgli
2009-12-30
打赏
举报
回复
能否给一个不会粘包的设计实例参考一下
尘雨
2009-12-27
打赏
举报
回复
客户端太快,如果服务端设计的不好,就会出现数据粘包,几个包被一起收了,而分包出现问题。
主要还是所使用的recv模型的问题,阻塞方式没看到你的代码,不好确定具体原因。
尘雨
2009-12-26
打赏
举报
回复
在send时,把包合并,按照64K为一个单位发。接收时,也按照64K单位recv,不够64K,有多少接多少。收取够,64K,再检查包
你的协议,如果不是应答式,按照上面说的。
sesgli
2009-12-26
打赏
举报
回复
不错的解决办法,照你的方法做确实可以解决问题,
但很想知道发送速度太快造成数据包错误的原因是什么,是不是还存在什么隐患?
我SOCKET采用的是阻塞方式,专门开了一个线程接收数据
数据处理救星降世Power Query
0/ Excel数据处理新利器来了,准备好了吗? 1/ 比网红函数VLOOKUP还全面的功能。——查(查询) 2/ 取其精华,去其糟粕。——筛(筛选) 3/ 拆分就像同学会,拆散一对是一对。——拆(拆分) 4/ 天下大势,合久必分...
UDP中一个包的大小最大能多大
点评 因为UDP数据
传输
的无连接特性,最简单的UDP数据
传输
就是一次数据交互一个UDP包搞定,这样就不用管分包问题(因为不像TCP,UDP
传输
时如果分包则是不能保证顺序的,这会带来很多问题)。所以你一次交互的数据如果太多的话,用UDP实现就很可能并不优雅。 (移动端即时通讯/IM 学习和讨论QQ群:http://www.52im.net/portal.php?mod=topic&top...
如何选择即时通讯应用的数据
传输
格式
前言 即时通讯应用(包括IM聊天应用、实时消息推送应用等)开发的前期技术选型时,关于数据
传输
格式的选择,在即时通讯开发者同行的眼里,是个极富争议话题。精略分析一下,大概的原因在于: 可选择的协议或封装格式多种多样:可选择的余地很大:XMPP、Protobuf、JSON、私有2进制、MQTT、定格化XML、Plain text等等; 同一种格式并不能适用于大多数的场景:不同的场景...
最优
传输
理论与计算 ——雷娜 顾险峰 【新书发布】
缘起 1995年秋季,第二作者刚刚来到哈佛大学开始攻读计算机科学领域的博士学位,并在数学系学习丘成桐先生的微分拓扑课程,同时在麻省理工学院人工智能实验室学习Berthold Horn教授的机器人视觉课程. Horn教授提倡从物理的角度来理解视觉机理,用偏微分方程来解决工程问题.Horn教授讲解了他的经典工作“Shape from Shading”,将从二维图片重建三维几何的问题归结为求解双曲型偏微分方程. Horn教授也讲解了“Extended Gauss Image”的想法,目的是用Gauss曲率来重建
Hidden Surface Removel Algorithms — Occlusion Culling
隐藏面剔除算法的出现是基于以下的现实,在游戏场景中你不必每帧都将所有的物体渲染到屏幕上,它的作用主要有两个:一个是减少GPU的屏幕填充率,另一个是减少CPU和GPU的
传输
带宽。根据当前的硬件现状GPU的填充率已经不存在任何问题,而现在唯一的限制位于AGP上,它那可怜的一点带宽已经成为图形渲染的瓶颈,因此当前HSR算法大部分都放在CPU端来做以尽
量
减少每帧需要
传输
的数据
量
,这里你不需要对C
网络编程
18,356
社区成员
64,214
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章