在UDP中接收数据包假设我的程序通过网络(UDP)发送1000个字节。是否保证接收方将在一个“批次”中接收到1000个字节?或许他需要做几次“阅读”才能获得完整的消息?如果后者为真,我如何确保同一消息的数据包顺序不“混淆”(按顺序),或者协议可能保证它?编辑:也就是说,我的消息是否有可能被分成多个数据包?(如果我尝试发送10000mb的消息会发生什么情况?)要么全有要么全无。但是并不能特别保证您会按照发送的顺序恰好收到一次数据包。数据包丢失、重新排序和(不太常见)重复都是可能的。存在最大帧大小(65,507字节),对于更大尺寸的数据包,send()将返回错误。您必须提供足够的缓冲区以在一次调用中接收整个帧。UDP数据包可以分片成多个IP片段,但操作系统会丢弃不完整的数据包。因此,这对应用程序是透明的。接收方将在一次调用中获得整个数据包。数据包长度即使在理论上也是有限的:length一个16位字段,以字节为单位指定整个数据报的长度:报头和数据。最小长度为8个字节,因为这是标头的长度。对于UDP数据报,字段大小设置了65,535字节的理论限制(8字节报头+65527字节数据)。底层IPv4协议对数据长度的实际限制是65,507字节。但是,实际限制要低得多,假设512字节通常是安全的。请参见Internet上最大的安全UDP数据包大小。与TCP不同,UDP不是可靠的协议。它不提供内置机制来确保数据包以正确的顺序到达,甚至根本不提供。也就是说,您可以同步编写发送/接收例程,每次发送数据包时,发送方都必须等待收到ACK,然后才能再次发送。如果在指定超时后未收到ACK,则必须重新发送数据包。这确保以正确的顺序接收数据包。(有关更多信息,请查看使用此策略的TFTP协议的RFC。)最后,如果可能,您可能要考虑使用TCP。使用UDPLite,您可以请求接收部分损坏的数据包。这对于视频和VoIP服务非常有用。以上就是C#学习教程:接收UDP包共享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权请点击右侧联系管理员删除。如需转载请注明出处:
