UDP本身是无应答的,应用程序如何在应用层自己做应答以确信传输的正确性?(100分)

  • 主题发起人 主题发起人 dfw001
  • 开始时间 开始时间
有两种方式建立应答可以考虑:
1,收到信息处理完毕,马上把处理结果发给发送者。
2,收到信息后处理信息,记录信息id和处理情况,通过另一线程把id的处理结果发送给发送端。
 
关键是udp掉包的问题,比如把处理结果发给发送者,如果发送方收不到怎么办?
 
如果那么考虑发送接收结果和顺序,考虑TCP吧
 
TCP不在讨论之内
 
来自:dfw001, 时间:2003-12-14 10:33:00, ID:2352751
关键是udp掉包的问题,比如把处理结果发给发送者,如果发送方收不到怎么办?

我想发送方应该有一个接收返回信息的timeout 设定,超过时间,就不等了,
就属于对方网络断开。
而客户端在发送完毕后,也应该有一个timeout(应该比服务器端的时间短) 设定,
如果超过时间,那么再发送一次,如果 N(比如是10)仍然无法接收应答,那么就
算网络断开了。
 
你可以用UDP的Socket作数据传输,用一个TCP的Socket作数据交验。其实TCP也是在用IP包自己做得校验,你可以参考TCP的校验机制,这样作工作量不算太大。
 
yanyandt2这个方法不错。
qince额外用一个TCP的Socket作数据交验的话开销太大了点。
 
UDP本来就是这个样的,以牺牲数据验证来获得比TCP快得多的传输速度,这两者是相互矛盾的。
 
UDP和TCP运用领域不太一样,比如像视频广播这种可以丢包,但对带宽有很高要求的应用用UDP比较合适,像数据库应用就应该使用TCP传输数据,因为这时数据正确性比网络开销更重要。
 
没次发送流之后就打开一个计时器循环,在指定的时间没有收到服务器的回复,就断开,估计是网络不通或者传送没有到达目的地!!
 
To janph:
这种算法不行吧,因为UDP是无连接的,所以可能第一个包和第二个包的发送路径完全不同,到达时间也有不同。指定时间内服务器很有可能收不到确认包,如果这样的话,实际没有断开而错误判断的几率会很大。
 
//大 家 继 续 讨 论//
 
To qince:
无连接的,但你可以给它指定目的地呀,只要中途没有变更地址,就不会出现你说的情况!我的意思是分开发,如果第一个包没有返回信息,就继续发第一个包,否则,就发第二个包,我的程序就这样做,没有问题呀?
 
这就涉及到路由的问题了,根据路由策略不见发送路径完全相同,又不为什么实时视频流还要有一个报序号呢,是因为可能第二个包已经到了,而第一个包还没有到。
而且UDP和TCP的领域不同,UDP是对传输带宽要求大或者可以丢包的情况下采用的,所以第一个包没有到继续发第一个包的方式就是TCP要做的事,但是TCP总会比一个两个人编写的策略更好的,不是吗?
所以,在UDP上做校验可以参考TCP的方式,毕竟TCP使许都高手共同编写出来的。
 
我的意思是一定在udp的环境下!!如果要用tcp,省得那么多麻烦!!
 
多人接受答案了。
 
后退
顶部