XP上C#中的UDP缓冲区

XP上C#中的UDP缓冲区,c#,windows,sockets,udp,C#,Windows,Sockets,Udp,我有一个连续的udp数据包流到运行windows xp的计算机。 在某个时刻,我启动了一个侦听器(用C#编写),它处理接收到的udp数据包 当我启动监听器时,我会得到在监听器启动之前由于缓冲区而发送的数据包吗,或者我能确定我进入监听器的第一个数据包实际上是自监听器启动以来收到的第一个数据包吗?UDP传递不保证按顺序到达,完全到达,只到达一次,或在一定时间后到达 因此,您还需要处理在开始侦听端口之前发送的UDP数据包,但由于某种原因,这些数据包在开始侦听之后才到达世界各地 在大多数O/S实现中,当

我有一个连续的udp数据包流到运行windows xp的计算机。 在某个时刻,我启动了一个侦听器(用C#编写),它处理接收到的udp数据包


当我启动监听器时,我会得到在监听器启动之前由于缓冲区而发送的数据包吗,或者我能确定我进入监听器的第一个数据包实际上是自监听器启动以来收到的第一个数据包吗?

UDP传递不保证按顺序到达,完全到达,只到达一次,或在一定时间后到达

因此,您还需要处理在开始侦听端口之前发送的UDP数据包,但由于某种原因,这些数据包在开始侦听之后才到达世界各地

在大多数O/S实现中,当一个UDP数据包到达一个端口(并且它不是广播的)并且没有人在该端口上监听UDP时,该数据包将被丢弃。但是,在侦听器启动时,在O/S有机会处理UDP数据包之前,UDP数据包有可能到达O/S并在网络驱动程序的内部缓冲区中排队。然后你也会看到它


一般来说,永远不要假设任何可靠的数据来自UDP数据包。

UDP传递不保证按顺序到达、完全到达、仅到达一次或在特定时间后到达

因此,您还需要处理在开始侦听端口之前发送的UDP数据包,但由于某种原因,这些数据包在开始侦听之后才到达世界各地

在大多数O/S实现中,当一个UDP数据包到达一个端口(并且它不是广播的)并且没有人在该端口上监听UDP时,该数据包将被丢弃。但是,在侦听器启动时,在O/S有机会处理UDP数据包之前,UDP数据包有可能到达O/S并在网络驱动程序的内部缓冲区中排队。然后你也会看到它


一般来说,永远不要假设任何可靠的数据来自UDP数据包。

这正是我所担心的。有没有办法在O/S级别清除缓冲区?当缓冲区只到达网卡的设备驱动程序时就没有了。有没有什么特别的原因让你需要如此确定性的东西,却选择使用UDP?您可能使用了错误的工具来执行此任务。这是一种连续传输UDP数据包的商业产品。在这件事上我别无选择,我必须以某种方式估计何时收到哪些数据包。你不应该真的尝试同步UDP数据包,因为传递不保证有序,也不保证快速或慢速到达。数据包在您启动侦听器后到达的事实并没有说明数据包是何时从其源发送的。我建议你简单地启动监听器,然后从那时开始接收任何数据包。这是来自科学仪器的数据。(不要问为什么选择UDP)。流通常相当稳定(因为仪器与计算机之间存在直接链路),因此多个网络路由器产生的UDP不确定性最小化。我担心的是,当数据包被实际接收时,O/S和.NET框架中是否有一些内部缓冲区将以前接收到的数据包暴露给我的侦听器。这就是我担心的。有没有办法在O/S级别清除缓冲区?当缓冲区只到达网卡的设备驱动程序时就没有了。有没有什么特别的原因让你需要如此确定性的东西,却选择使用UDP?您可能使用了错误的工具来执行此任务。这是一种连续传输UDP数据包的商业产品。在这件事上我别无选择,我必须以某种方式估计何时收到哪些数据包。你不应该真的尝试同步UDP数据包,因为传递不保证有序,也不保证快速或慢速到达。数据包在您启动侦听器后到达的事实并没有说明数据包是何时从其源发送的。我建议你简单地启动监听器,然后从那时开始接收任何数据包。这是来自科学仪器的数据。(不要问为什么选择UDP)。流通常相当稳定(因为仪器与计算机之间存在直接链路),因此多个网络路由器产生的UDP不确定性最小化。我担心的是,当实际接收到数据包时,O/S和.NET框架中是否存在一些内部缓冲区,这些缓冲区将以前接收到的数据包暴露给我的侦听器。