社区
C语言
帖子详情
TCP是否会自动重发?
james_hw
2011-03-13 04:47:06
现在有一个现象,客户端发送了一条消息,服务器端有较小概率收到2条一模一样的消息。
当时的链路情况不是很稳定,不知道有没有朋友遇到同样的问题?
怀疑会不会在链路不稳定时,底层socket会自动重发
...全文
488
10
打赏
收藏
TCP是否会自动重发?
现在有一个现象,客户端发送了一条消息,服务器端有较小概率收到2条一模一样的消息。 当时的链路情况不是很稳定,不知道有没有朋友遇到同样的问题? 怀疑会不会在链路不稳定时,底层socket会自动重发
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
yanghehong
2011-03-13
打赏
举报
回复
TCP作为一种可靠传输协议,是有超时自动重传机制没错。
RFC 793:
. If the ACK is not received within a timeout
interval, the data is retransmitted.
不过这个重传对应用程序是透明的,对应用来说,这会收到一个,因为TCP加序号然后做了重复的过滤:
At the receiver, the sequence
numbers are used to correctly order segments that may be received
out of order and to eliminate duplicates.
楼主这个问题,得再自己对自己的发送和接受应用程序做更仔细的调试。基本上和TCP无关。
-
千里孤行
maoxing63570
2011-03-13
打赏
举报
回复
记得,如果因为网络传输超时,TCP协议会对重复得到的包直接丢弃,然后发送确认
arong1234
2011-03-13
打赏
举报
回复
虽然都可能出错,但是TCP底层出错的可能性比你程序出错的可能性要小得多,因此仅仅根据自己日志就去怀疑TCP是没有道理的。
最直观的办法是在发送端和接收端同时用netmon或者其他sniffer抓包,看看到底谁发了重复的报文
[Quote=引用 6 楼 jamesf1982 的回复:]
引用 4 楼 qq120848369 的回复:
再咋样收到两条说明客户端用户自主发送了两次,与协议无关。
通过日志验证的确只send了一次
[/Quote]
arong1234
2011-03-13
打赏
举报
回复
TCP会自动过滤多余的自动重传消息,你服务器收到重复的消息应该和TCP无关,因为TCP确保你收到且只收到一份你发出的消息
[Quote=引用 2 楼 jamesf1982 的回复:]
引用 1 楼 csuxiaowu 的回复:
TCP 协议中的自适应的超时重传
能说明一下这个超时重传机制么?有没有办法防止服务器端收到2条一模一样的消息?
[/Quote]
james_hw
2011-03-13
打赏
举报
回复
[Quote=引用 4 楼 qq120848369 的回复:]
再咋样收到两条说明客户端用户自主发送了两次,与协议无关。
[/Quote]
通过日志验证的确只send了一次
james_hw
2011-03-13
打赏
举报
回复
[Quote=引用 3 楼 freefice 的回复:]
异步通信机制,需要添加流水号与校验码,根据流水号确定是否是重发信息,根据校验码确定是否要重发。
[/Quote]
这是一个办法,不过服务器端为每个客户端分配流水号与校验码则工作量亦不轻松。能否从socket上配置避免其自动重发?
qq120848369
2011-03-13
打赏
举报
回复
再咋样收到两条说明客户端用户自主发送了两次,与协议无关。
庄鱼
2011-03-13
打赏
举报
回复
异步通信机制,需要添加流水号与校验码,根据流水号确定是否是重发信息,根据校验码确定是否要重发。
james_hw
2011-03-13
打赏
举报
回复
[Quote=引用 1 楼 csuxiaowu 的回复:]
TCP 协议中的自适应的超时重传
[/Quote]
能说明一下这个超时重传机制么?有没有办法防止服务器端收到2条一模一样的消息?
Csuxiaowu
2011-03-13
打赏
举报
回复
TCP 协议中的自适应的超时重传
C#与Android进行
Tcp
通讯(心跳包;长连接,
自动
重连,发送失败时
自动
重发
)
c#写
tcp
Listener;Android写
tcp
Client 具有心跳包,长连接,
自动
重连,发送失败
自动
重发
等功能 电脑与Android需要同属一个局域网
tcp
Listener设计成只能与一个
tcp
Client通信(当多个客户端接入时,
会
自动
与前一个接入的客户端断开)
tcp
Client具有重连,长连接,与
tcp
Listener进行心跳包通讯
c#多线程
tcp
高并发林业监测硬件设备模拟器.zip
c#多线程
tcp
高并发模拟器 可以同时启动几千条发送进程和接收进程 可以模拟硬件发送数据 一、通信协议 1 设备与服务器之间使用
TCP
/IP通信。 2 当设备与服务器之间建立连接后,设备应在60秒内将所有数据发送到服务器。并在数据上传完毕后
自动
断开与服务器的连接。 3 设备向服务器发送上报数据后,服务器
会
按照Remote Control Interface Data Structrue的协议格式给出成功/失败的响应。 4 设备应具备数据
自动
重发
功能。(当设备发送数据到服务器失败时,
会
自动
将失败的数据主动
重发
到服务器) 5 协议中提及的按顺序的12个采集因子,分别是:温度,湿度,地湿,3秒平均风速,3秒平均风向,2分平均风速,2分平均风向,10分平均风速,10分平均风向,日雨量,气压,连续无雨日 6 约定所有数值型的数据传输,除特殊指定(如ASCII字符)外,均以高位在前的方式传输。
关于socket的基于
TCP
协议的异步通信系统--TongXing.DLL
最近做了一个关于socket的基于
TCP
协议的异步通信系统--TongXing.DLL;它里面封装了通信的一些比较复杂的方法:1:数据加密解密 2:数据失败
自动
重发
3:心跳模块 4:客户端网络问题断开
自动
重连 5:服务器
自动
拒绝非法登录 6:解决了粘包问题等等方法 操作方法:1:服务器首先只要TxStart.startServer得到一个实例化的接口类ITxServer,所有方法,属性,事件都在里面有 2: 客户端首先只要TxStart.startClient得到一个实例化的接口类ITxClient,所有方法,属性,事件都在里面有 暴露给大家的只有ITxServer和ITxClient这二个类,所以二次开发比较简单,具体看例子 3:在startClient和startServer引擎开启之前大家可以设置好一切属性和加载事件;如一次最大发送量,默认是1KB.最多连接多少客户端数量.断开
是否
重连等等 4:我这里把二种发送模式分开了,一种是发送文本的,一种是发送图片数据也就是直接字节集,收到也是一样 最后祝大家事业有成,如果有什么问题及时跟我交流,呵呵,一开始肯定问题不少。有什么建仪一定要告诉我哦,我尽量做的更加强大 联系QQ:365368248 注上通信系统
QT5 串口&
TCP
; 服务器调试工具 V1.1
qt5 GW64 windows 系统测试完成,带可执行文件和源码,功能描述:串口调试助手,
TCP
服务器调试助手,
自动
重发
,HEX/ASCII,多项发送等等基本功能已经完善,修复了多个串口助手同时打开同一端口问题。后续若有问题
会
再及时更新
TCP
&UDP测试工具.rar
用于
TCP
,UDP发包的调试工具,支持客户端及服务端模式,支持
自动
重发
,字符及十六进制格式,及文件发送
C语言
69,382
社区成员
243,073
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章