假设我正在尝试使用udp socket发送数据。如果数据很大,那么我认为数据将被分成几个数据包并发送到目的地。
在目的地,如果有多个传入数据包,那么如何将这些分离的数据包合并到原始数据包中?我是否需要一个基于发件人保存所有传入udp的数据结构?提前谢谢..
答案 0 :(得分:4)
如果您只是使用单个send()
调用在一个数据报中发送数据,那么传输层将为您完成碎片和重组。您需要做的就是为recv()
提供足够大的缓冲区,如果所有碎片都已到达,那么它们将被重新组装并作为单个数据报呈现给您。
基本上,这是UDP为您提供的服务(其中“数据报”是由单个send()
调用发送的单个数据块):
但是,如果您自己在应用层执行将数据划分为多个UDP数据报,那么您当然也有责任重新组装它。
1。无论如何,纠正UDP校验和所暗示的概率。
答案 1 :(得分:0)
你应该使用TCP。 TCP适用于需要按特定顺序到达而不会被丢弃的结构化数据。
另一方面,在大约500毫秒后数据包变得无关时使用UDP。这用于游戏,电话等。
答案 2 :(得分:0)
如果您的问题需要UDP,那么您需要自己处理任何丢失,重复或无序的数据包,或者至少编写能够适应这种可能性的代码。
http://en.wikipedia.org/wiki/User_Datagram_Protocol
如果您无法承受丢失的数据包,那么TCP可能是比UDP更好的选择,因为它提供了开箱即用的保证。