C#socket通讯中,在发送方进行数据发送时判断发送是否成功,如果不成功重发?

Dragonlongsheng 2011-05-19 05:06:04
C#socket通讯中,在发送方进行数据发送时判断发送是否成功,如果不成功重发?
具体代码怎么写?请高手授教!!!
...全文
1104 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
liangjun90 2011-05-21
  • 打赏
  • 举报
回复
发送后让客户端返回一个信息,如果有返回就成功,没返回就重发了
isjoe 2011-05-20
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 dragonlongsheng 的回复:]
应该是接收方接收时发生粘包,问在发送端或服务端有没有合适的解决方案?当发送大量数据时还会不会出现
数据丢失现象?
[/Quote]

1、每个包的大小不要超过1400。
2、为每个包附加头信息,包括长度,类型等等,长度必须有的,自己解包计算合适的完整包。
很多人都用这个方法或类似的方法。

另外使用TCP的话,你不需要太担心的收发问题,TCP是可靠连接、并收发。
如果实在不放心的话,就给每个消息定义一个唯一消息号。你发一条消息,就把消息号记录。
对方收到后回发一个确认,包含消息号。发送方收到确认消息号后从已发送消息列表中删除他。
若指定的时间没有收到对方的确认则重发,重发N次后,放弃,自行处理。。。。。。。
Dragonlongsheng 2011-05-19
  • 打赏
  • 举报
回复
应该是接收方接收时发生粘包,问在发送端或服务端有没有合适的解决方案?当发送大量数据时还会不会出现
数据丢失现象?
Dragonlongsheng 2011-05-19
  • 打赏
  • 举报
回复
我的终端发跟服务器连接时有标准的心跳数据格式,发送数据时也有头标记,但连续发送数据时,服务端总会部分数据丢失,在发送端加上Thread.Sleep()后服务端才能接收并显示到全部数据(sleep睡眠为500可以,200还是不行),请高手赐教,如何解决?
bambuz 2011-05-19
  • 打赏
  • 举报
回复
应该定好通讯协议, 比方为 Flag(byte) + CommandType(short) + Conntent [byte[]];
相互发送消息, 根据接收到的消息判断是否发生ok.
其中用到方法: BitConverter.ToInt16(), BitConverter.GetBytes(),EnCoding.ASCII.GetBytes(string), 这样的类型转换函数.
Dragonlongsheng 2011-05-19
  • 打赏
  • 举报
回复
我使用的时TCP协议,有没有办法在客户端通过代码检测服务端是否收到数据?
isjoe 2011-05-19
  • 打赏
  • 举报
回复
如果使用TCP协议,就没有这些操心的事情了。

如果用UDP的话,则服务器端和客户端必须协调对话一下,以确保消息已经收到,
通常udp发送会携带一个消息编码(唯一的),用来确保消息已经到达。
bdmh 2011-05-19
  • 打赏
  • 举报
回复
定好协议,类似心跳,发送心跳,然后计时,一定时间无返回,确认发送不成功

111,093

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧