当前位置: 代码迷 >> C# >> c#在用udp传送数据时,丢包后如何才能重传丢失的包
  详细解决方案

c#在用udp传送数据时,丢包后如何才能重传丢失的包

热度:515   发布时间:2016-05-05 05:28:32.0
c#在用udp传送数据时,丢包后怎么才能重传丢失的包
c#在用udp传送数据时,丢包后怎么才能重传丢失的包.
需要在服务端发送收到的确认信息不?
具体如何实现这样的功能。希望大神们给我点具体代码,理论知识我是懂的就是具体实现试了几次都没有成功!
------解决思路----------------------
引用:
就是不想用TCP了,就是在UDP确认收到包的时候不知道怎么做


先把要发送的包放到一个队列里

包数据如下

[
CmdID
ReciveKey
PackData
]

这样组成一个包。

然后放到队列里去
发送队列的第一个包(然后等待服务端返回的ReciveKey同时计算是否超时,超时再发一次,连发三次,就把这个包移出队列)

服务端收到包后返回这个包的ReciveKey 

此时客户端收到ReciveKey 此时将发送过的这个包的移出队列。继续发送下一个包。




------解决思路----------------------
引用:
就是不想用TCP了,就是在UDP确认收到包的时候不知道怎么做


如果你做好了,就不会轻率地说“不想用TCP了”。恰好是做不好的情况下,才容易这样说。

如果进行可靠通讯,那么这种UDP则必TCP就差太多了。因为TCP会分成许多个包使用不同的路由途径发送数据(最后再组装在一起),而且会自动根据网络的情况调整延时礼貌地保证大家都能畅通(而不是阻塞网络),发送端还可以根据接收端的缓冲窗口的变动状况而调整自己的行为,等等等等。这些都是UDP根本没有的。

仅仅“保证可靠通讯”这一项,如果你做到了,那么在小办公室里测试,它的速度可能就比合适的TCP通讯一点也不快了。显得多余了。

实际上UDP用在那些容许丢失信息的地方,比如QQ通讯有时候就会出错,再比如语音或视频本来就容忍如此。而你想用在不能容忍丢失信息的地方,是不对的!
  相关解决方案