社区
网络编程
帖子详情
socket传送文件,每个tcp数据包都会重发
痴心笨笨
2012-09-20 03:26:32
如题,服务端、客户端我都是通过socket实现的,通过抓包软件查看,每个tcp数据包都是要重发一次,这是什么问题呢?
查看资料得知,可能是tcp中的重传计时器的问题,该如何解决呢?
附图,数据包情况
...全文
1239
18
打赏
收藏
socket传送文件,每个tcp数据包都会重发
如题,服务端、客户端我都是通过socket实现的,通过抓包软件查看,每个tcp数据包都是要重发一次,这是什么问题呢? 查看资料得知,可能是tcp中的重传计时器的问题,该如何解决呢? 附图,数据包情况
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
18 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
_暮落_
2012-09-27
打赏
举报
回复
缓冲区不够大?
痴心笨笨
2012-09-24
打赏
举报
回复
[Quote=引用 12 楼 的回复:]
自己程序逻辑的问题,怪到TCP的头上了。
[/Quote]
这位大神,可能啥逻辑错误呢
痴心笨笨
2012-09-24
打赏
举报
回复
[Quote=引用 16 楼 的回复:]
还有,lz那是什么抓包软甲,瞧着挺不错的。
[/Quote]
国产精品,科来软件
wjb_yd
2012-09-24
打赏
举报
回复
还有,lz那是什么抓包软甲,瞧着挺不错的。
wjb_yd
2012-09-24
打赏
举报
回复
是不是目标端回发的太狠了,百兆网卡,12.5M/S,看一下你的对端每秒发来的数据量是不是远远大于12.5M了,是的话必然会出现重传。 再者就是把你的接受缓冲区弄大一些。
Joseph-Growth
2012-09-21
打赏
举报
回复
你的抓包工具确实挺不错的。
我看你是在本机上自己发自己收。我分析的是这样的:当接收缓冲区阻塞的时候,你发送的数据包发送给接收端,此时,接收端不能接收,也就是不能返回ACK,它也不能返回RST,所以就会不处理,这时候超时时间到,发送端以为接收端没收到,就又发了一个SYN,这样就重发了。
我建议的是,提高接收线程的优先级,或者说降低发送线程的优先级。让接收端缓冲队列时刻保持能接收的状态。
痴心笨笨
2012-09-21
打赏
举报
回复
[Quote=引用 8 楼 的回复:]
链路太堵了,tcp通信的ACK数据包未及时收到原因,降低I\O,可以解决这个问题。
[/Quote]
如何降低I/O呢?
geziliu
2012-09-21
打赏
举报
回复
应该是代码问题,TCP是流的。
UDX协议
2012-09-21
打赏
举报
回复
自己程序逻辑的问题,怪到TCP的头上了。
Gloveing
2012-09-20
打赏
举报
回复
应该是你发送的速率太快了,网络环境传输速率跟不上
Joseph-Growth
2012-09-20
打赏
举报
回复
链路太堵了,tcp通信的ACK数据包未及时收到原因,降低I\O,可以解决这个问题。
痴心笨笨
2012-09-20
打赏
举报
回复
这个tcp数据包的发送不是直接控制的,我是通过
if(send(m_Socket, sBuffer, nLen, 0) == nLen)
直接发送的一个819200大小的sBuffer实现的...
痴心笨笨
2012-09-20
打赏
举报
回复
[Quote=引用 5 楼 的回复:]
引用 4 楼 的回复:
引用 3 楼 的回复:
1.证明你网络很卡
2.你代码有问题
谢谢啊,应该是哪个地方处理的有问题啊~~
网络应该没问题吧,我现在是局域网对传呢?
我最纳闷的就是那个两个重传的数据包之间时间间隔仅仅是20微秒上下,咋会这么短时间就重传呢?
我好奇的是20微秒上下你就发送1000左右,那你1秒钟得发多少东西?
要是你发的包一出门堵塞了,就被丢弃了,……
[/Quote]
韩信将兵多多益善啊,哈哈
“要是你发的包一出门堵塞了,就被丢弃了”倒是也有这种可能,研究中
guolaikk
2012-09-20
打赏
举报
回复
[Quote=引用 4 楼 的回复:]
引用 3 楼 的回复:
1.证明你网络很卡
2.你代码有问题
谢谢啊,应该是哪个地方处理的有问题啊~~
网络应该没问题吧,我现在是局域网对传呢?
我最纳闷的就是那个两个重传的数据包之间时间间隔仅仅是20微秒上下,咋会这么短时间就重传呢?
[/Quote]
我好奇的是20微秒上下你就发送1000左右,那你1秒钟得发多少东西?
要是你发的包一出门堵塞了,就被丢弃了,会不会这么短时间就重传呢?
痴心笨笨
2012-09-20
打赏
举报
回复
[Quote=引用 3 楼 的回复:]
1.证明你网络很卡
2.你代码有问题
[/Quote]
谢谢啊,应该是哪个地方处理的有问题啊~~
网络应该没问题吧,我现在是局域网对传呢?
我最纳闷的就是那个两个重传的数据包之间时间间隔仅仅是
20微秒
上下,咋会这么短时间就重传呢?
看不见的裂痕
2012-09-20
打赏
举报
回复
1.证明你网络很卡
2.你代码有问题
痴心笨笨
2012-09-20
打赏
举报
回复
[Quote=引用 1 楼 的回复:]
对方最终收到的数据重复吗?
[/Quote]
没有重复数据,客户端接收到得数据完全正确~~
guolaikk
2012-09-20
打赏
举报
回复
对方最终收到的数据重复吗?
p2p.zip_java
tcp
p2p开发_
tcp
实现
文件
_聊天传
文件
在
TCP
中,
每个
数据包
都
会
被确认,如果
数据包
丢失,
TCP
会
自动
重发
,确保数据的完整性。在Java中,`java.net.
Socket
` 和 `java.net.Server
Socket
` 类用于实现
TCP
连接,`
Socket
` 是客户端,`Server
Socket
` 是服务端,...
TCP
_FILE_TRAN
2. **序列号与确认机制**:
每个
数据包
都有唯一的序列号,接收端收到
数据包
后发送确认信息,如果发送端未收到确认,则
重发
数据包
,确保数据的完整性。 3. **多线程技术**:为了提高
文件
传输效率,"
TCP
_FILE_TRAN...
Socket
Tool
在
TCP
中,数据在发送之前
会
建立连接,接收方确认接收到
每个
数据包
,如果
数据包
丢失,
TCP
将自动
重发
。这种机制保证了数据的完整性,但同时也增加了网络开销,可能
会
影响传输速度。 相反,UDP是无连接的、不可靠的...
udp
文件
传输 实验
每个
接收到的
数据包
都
会
被检查其头部信息,以确认数据的完整性和顺序。如果接收线程在预设时间内未启动成功,主程序
会
提示创建失败。 接收线程运行时,使用`FD_SET`和`select()`函数来监听
数据包
的到来。一旦有...
python
TCP
协议详解.doc
TCP
采用发送应答机制,
TCP
发送的
每个
报文段都必须得到接收方的应答才认为这个
TCP
报文段传输成功。超时重传,发送端发出一个报文段之后就启动定时器,如果在定时时间内没有收到应答就重新发送这个报文段。 三、...
网络编程
18,363
社区成员
64,187
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章