我有一个连续的udp数据包流到运行windows xp的计算机上。 在某些时候,我启动一个处理收到的udp数据包的监听器(用C#编写)。
当我启动监听器时,是否会获得在监听器启动之前由于缓冲区而发送的数据包,或者我可以确定我进入监听器的第一个数据包实际上是收听者收到的第一个数据包开始?
答案 0 :(得分:4)
UDP传送不保证按顺序到达,到达所有,仅到达一次,或在一定时间后到达。
因此,您还需要处理在开始收听端口之前已发送的UDP数据包,但出于某种原因进行了全球巡演,直到之后才到达你开始听了。
在大多数O / S实现中,当UDP数据包到达端口(并且它不是广播)并且没有人在该端口上侦听UDP时,数据包将被丢弃。但是,UDP数据包有可能到达O / S并在网络驱动程序的内部缓冲区中排队,之前 O / S有机会在您的侦听器启动时处理它。然后你也会看到它。
一般情况下,永远不要假设UDP数据包可靠。