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