假设我正在尝试使用udp套接字发送数据。如果数据很大,那么我认为数据将被分成几个数据包并发送到目的地。UDP数据包大小和fragements
在目的地,如果有多个传入数据包,那么如何将这些分离的数据包合并到原始数据包中?我是否需要一个数据结构来保存基于发件人的所有传入udp?在此先感谢..
假设我正在尝试使用udp套接字发送数据。如果数据很大,那么我认为数据将被分成几个数据包并发送到目的地。UDP数据包大小和fragements
在目的地,如果有多个传入数据包,那么如何将这些分离的数据包合并到原始数据包中?我是否需要一个数据结构来保存基于发件人的所有传入udp?在此先感谢..
如果您只是简单地在一个数据报中发送数据,使用一个单一的send()
调用,那么传输层将为您完成分段和重组。所有你需要做的就是给recv()
提供一个足够大的缓冲区,如果所有的碎片已经到达,那么它们将被重新组合并作为单个数据报呈现给你。
基本上,这是UDP为您提供的服务(其中“数据报”是由单个send()
呼叫发送的数据的一个单一的块):
但是,如果您正在执行将数据划分为多个UDP数据报的情况,那么在应用层,您当然也会负责重新组装它。
1.无论如何,校正UDP校验和隐含的概率。
您应该为此使用TCP。 TCP适用于需要以特定顺序到达而不被丢弃的结构化数据。
另一方面,当数据包在约500毫秒后变得不相关时使用UDP。这用于游戏,电话等等。
如果您的问题需要UDP,那么您需要自己处理任何丢失,重复或乱序的数据包,或者至少编写能够适应这种可能性的代码。
http://en.wikipedia.org/wiki/User_Datagram_Protocol
如果你不能丢失的数据包,那么TCP可能比UDP更好的选择,因为它提供了保证开箱。
感谢您的回复。我想知道数据包是否来自多个源(发件人),那么我该如何处理?传输层也会自动处理这个问题(根据来源合并数据包)? – codereviewanskquestions 2011-05-25 00:53:36
@LCYSoft:是的,来自不同来源的多个数据报或片段不会被接收器组合。 – caf 2011-05-25 01:17:51