C# Socket UDP 丢包问题怎么解决

daiyong_88 2010-12-22 11:26:21
需求:由于我是在嵌入式终端操作Socket,所以Socket不能一直链接,只有发送消息时才链接,等过了超时,就算失败,关闭Socket 。
现在我有一个登录,和一个传输图片,用的都是UPD,登录只发送一次,不会丢包,但是发送图片丢包很严重(很多次发送)。
我感觉是用for循环发送的太快了,丢包了,也不知道是不是的。如果一丢包,服务器就不会及时发消息我,不能及时关闭Socket。
现在想怎么避免丢包,由于是刚学Socket 对UDP怎么熟悉。
...全文
426 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
liaochaoxiao 2011-01-10
  • 打赏
  • 举报
回复
顶,如果是发送即时图片如何做呢,不可能是在重发,只能是直接把包丢弃重新接受新的包,有没有代码可以借鉴下?
daiyong_88 2010-12-22
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 hyttplay 的回复:]
验证包。

方式1:一发一验证。
每发送一次,等待对方回应。超时重发

方式2:全部发完再验证。
验证方式同上
[/Quote]
能不能贴个代码?怎么知道超时了?
纵横宇宙 2010-12-22
  • 打赏
  • 举报
回复
验证包。

方式1:一发一验证。
每发送一次,等待对方回应。超时重发

方式2:全部发完再验证。
验证方式同上
大黄鸭在发光 2010-12-22
  • 打赏
  • 举报
回复
网络丢包,是再正常不过的了。
既然用UDP,就要接受丢包的现实,否则请用TCP。
如果必须使用UDP,而且丢包又是不能接受的,只好自己实现确认和重传,说白了,就是自己实现TCP
烈火蜓蜻 2010-12-22
  • 打赏
  • 举报
回复
丢包无法避免,只能是重发
纵横宇宙 2010-12-22
  • 打赏
  • 举报
回复
你可以自定义一个超时时间

给每个数据包定义一个唯一的ID标识符

每发完一个包就将ID添加到消息队列去

对方收到包,要回应,并且附带报道ID标识符

定时检测消息队列的信息,看有没有超时的包,再重发

111,098

社区成员

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

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

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