问题描述
|
假设我正在尝试使用udp套接字发送数据。如果数据很大,那么我认为数据将被分成几个数据包并发送到目的地。
在目的地,如果传入的数据包不止一个,那么如何将那些分开的数据包合并为原始数据包?我是否需要一个基于发件人保存所有传入udp的数据结构?提前致谢..
解决方法
如果您只是使用单个“ 0”调用在一个数据报中发送数据,则传输层将为您完成分段和重组。您需要做的就是为ѭ1提供足够大的缓冲区,如果所有片段都到达了,则它们将被重新组装并作为单个数据报呈现给您。
基本上,这是UDP为您提供的服务(其中\“ datagram \”是由单个“ 0”调用发送的单个数据块):
数据报可能根本没有到达;
数据报可能相对于其他数据报无序到达;
数据报可能会不止一次到达;
如果数据报确实到达,它将是完整且正确的1。
但是,如果您自己在应用程序层将数据划分为几个UDP数据报,那么您当然也将负责重新组装它。
1.仍然以UDP校验和所隐含的概率进行更正。
,您应该为此使用TCP。 TCP用于需要按一定顺序到达而不被丢弃的结构化数据。
另一方面,当数据包在约500 ms之后变得不相关时,使用UDP。这用于游戏,电话等。
,如果您的问题需要UDP,则您需要自己处理所有丢失,重复或乱序的数据包,或者至少编写可恢复这种可能性的代码。
http://en.wikipedia.org/wiki/User_Datagram_Protocol
如果您无法承受丢失的数据包,那么TCP可能比UDP更好,因为它提供了开箱即用的保证。