社区
Linux/Unix社区
帖子详情
关于TCP包的小问题
whiteclouds
2007-01-18 08:59:35
我用tcp向linux的程序发送10k左右的数据,linux下我使用1k的缓冲区来接收,由于处理时间比较长,总是处理不对。可我并不能用和发送数据一样大小的缓冲区来接收,发送数据长度是变化的,而且不能预测,最多可能达到4M左右。我应该怎么处理呢?
...全文
305
11
打赏
收藏
关于TCP包的小问题
我用tcp向linux的程序发送10k左右的数据,linux下我使用1k的缓冲区来接收,由于处理时间比较长,总是处理不对。可我并不能用和发送数据一样大小的缓冲区来接收,发送数据长度是变化的,而且不能预测,最多可能达到4M左右。我应该怎么处理呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
whiteclouds
2007-01-26
打赏
举报
回复
我搞错了,我的问题不是TCP丢包造成的,而是发送端程序的bug没有把数据发完造成的。谢谢楼上的热心人。
qdhuxp
2007-01-22
打赏
举报
回复
"第一个包的最后包含一个数据结构的前半部分,我的分析函数已经处理并退出等待第二个包了,可程序就再也没有响应了"
-----------------
我猜想程序没有响应的原因是,端口占用,没有设置复用端口。这虽然是小问题,但有可能是本题的问题。
我认为好的数据结构和算法能够使程序更易实现、维护和扩展。按照bluedreammer(瀟瀟鳥) 的算法有可能会更好一些。
whiteclouds
2007-01-22
打赏
举报
回复
我使用realloc解决这个问题,也许还有更好的办法,楼上的办法我需要对现有程序进行大规模改动,几乎是完全重新作,肯定不行的。
bluedreammer
2007-01-22
打赏
举报
回复
可否这样,建立 buffer queue的机制。
即:Socket的数据接收是单独的一个线程或者进程,另外需要分析寻找完整的数据包。
一旦有完整的数据包,则将这个完整的包入队(如果包长不确定,可以采用动态分配的内存,当然更好的方式可以控制内存的总长度,溢出便舍弃最先入队的数据),从而建立一个数据包的Queue。
数据处理部分可以重新开一个线程,此线程Polling判断当前队列是否有数据,如果有,出队处理。
我想如果这样,应该不会有什么问题,逻辑上也很清楚的。
whiteclouds
2007-01-19
打赏
举报
回复
我的运行环境不许我创建文件,是嵌入式的,所以楼上的办法行不通。这个方案我已经用过,虽然可行但已经被否定。希望能得到别的方案提示
stoneme
2007-01-19
打赏
举报
回复
一般我们不这样处理数据
如果包非常小而且长度基本在一定范围内可以这样,但要求缓冲区大于最大数据长度再加一点
如果包很大,处理较慢就先把它存起来,如存到文件里,然后再用另外一个进程去处理
至于报文何时结束就要看你怎么定义的接口了不般不用解析包内容是否完整的方法处理
xfzhao_cn
2007-01-18
打赏
举报
回复
首先要明确一个观点,你每次读1k,不一定都能读到,你要确认返回值,因为TCP是稳定和可靠的,
你一直这么读,一定能完的
zhendeyue
2007-01-18
打赏
举报
回复
请楼主帮帮忙,我也在搞TCP/IP,但一直没有头绪,能否请楼主指教一下,非常感谢!
我的联系方式:uaohuyue@126.com qq:396052791一定要说明你是谁啊,不然我不加的。
darkone
2007-01-18
打赏
举报
回复
另外开辟一个大的缓存,4M也不算大,我这里的缓存有几百M,SOCKET只负责接收,收到的数据扔进去就可以了
kangji
2007-01-18
打赏
举报
回复
“由于处理时间比较长,总是处理不对”
哪里不对,报错了没?超时了没?
whiteclouds
2007-01-18
打赏
举报
回复
情况是这样:
我每次接到1k数据,就去分析处理,由于数据是有格式的,可能出现一个完整的数据被分在两个包里发送,我的程序每次都要分析是否存在这种情况。出现则分析函数就退出等待下一个包。
每次调试我都是把全部测试数据一次发出,第一个包的最后包含一个数据结构的前半部分,我的分析函数已经处理并退出等待第二个包了,可程序就再也没有响应了。
如果我把缓冲设为和数据一样大,就不存在这个问题。程序很流畅的执行。
如果tcp不会丢包,为什么我的程序会死掉呢?
计算机网络 传输层
TCP
和UDP协议
Re: 计算机网络 传输层
TCP
和UDP协议 # 传输层协议
TCP
和 UDP 的应用场景 要发送的内容多,需要将发送的内容分成多个数据
包
发送(
TCP
) 要发送的内容少,一个数据
包
就能发送全部内容(UDP) # 传输层协议和应用层...
关于
TCP
黏
包
问题
最近发现自己对于
TCP
通讯中的黏
包
问题
还有疑问,查阅资料做下总结。 一、
TCP
黏
包
问题
TCP
黏
包
问题
是因为发送方把若干数据发送,接收方收到数据时候黏在一
包
,从接受缓冲区来看,后一
包
的数据黏在前一
包
的尾部。 ...
Wireshark抓
包
——
TCP
协议分析
一. 实验目的 通过本次实验,掌握使用Wireshark抓取
TCP
/IP协议数据
包
的技能,...1.本次实验重点:利用Wireshark抓
TCP
包
及
TCP
包
的分析。 2.本次实验难点:分析抓到的
TCP
包
。 3.本次实验环境:Windows 7,Wiresha...
关于抓
包
出现
TCP
DUP ACK
问题
最近在跟一个CDN服务器端做对接,从CDN服务器下载内容(http),发现抓
包
出现非常多的
Tcp
Dup Ack异常提示。通过查阅质料得知
Tcp
Dup Ack xxx#y 代表了数据段丢失
TCP
状态,xxx代表数据丢失的位置,#后代表第几次...
面试:
TCP
/UDP如何解决丢
包
问题
?
如何解决
TCP
丢
包
的
问题
UDP丢
包
的
问题
一、主要丢
包
原因解决UDP丢
包
的
问题
TCP
传输协议中如何解决丢
包
问题
首先TPC为什么会丢
包
?
TCP
是基于不可靠的网路实现可靠传输,肯定会存在丢
包
问题
。 如果在通信过程中,...
Linux/Unix社区
23,116
社区成员
74,506
社区内容
发帖
与我相关
我的任务
Linux/Unix社区
Linux/Unix社区 应用程序开发区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章