C# UDP侦听器XP/Vista/Win7的差异?

C# UDP侦听器XP/Vista/Win7的差异?,c#,udp,C#,Udp,我在我的桌面上开发了一些运行Windows7的软件,该软件似乎运行得很好。该软件似乎在我们的Vista笔记本电脑上也运行良好。然而,我在XP上运行时遇到了一些问题 该软件从一个发现工具开始,该工具在端口46787上发送UDP广播消息,并侦听来自同一端口上设备的回复。这适用于所有三个操作系统 选择发现的设备后,发现UDP cient将停止。然后在端口46788上启动另一个UDP客户端,以侦听来自设备的数据: receiverUDP = new UdpClient("255.

我在我的桌面上开发了一些运行Windows7的软件,该软件似乎运行得很好。该软件似乎在我们的Vista笔记本电脑上也运行良好。然而,我在XP上运行时遇到了一些问题

该软件从一个发现工具开始,该工具在端口46787上发送UDP广播消息,并侦听来自同一端口上设备的回复。这适用于所有三个操作系统

选择发现的设备后,发现UDP cient将停止。然后在端口46788上启动另一个UDP客户端,以侦听来自设备的数据:

            receiverUDP = new UdpClient("255.255.255.255", 46788);
            receiverUDP.EnableBroadcast = true;

            // Start receiving Async UDP packets
            receiverUDP.BeginReceive(new AsyncCallback(ReceiveUDP), receiverUDP);
在XP上,调用EndReceive时会抛出System.Net.Sockets.SocketException,但它在Vista/Win7中工作得非常好,我的数据流通过

System.Net.Sockets.SocketException: The I/O operation has been aborted because of either a thread exit or an application request
   at System.Net.Sockets.Socket.EndReceiveFrom(IAsyncResult asyncResult, EndPoint& endPoint)
   at System.Net.Sockets.UdpClient.EndReceive(IAsyncResult asyncResult, IPEndPoint& remoteEP)
   at Demo.IOPanel.ReceiveUDP(IAsyncResult result) in C:\...\IOPanel.cs:line 262
   at System.Net.LazyAsyncResult.Complete(IntPtr userToken)
   at System.Net.ContextAwareResult.CompleteCallback(Object state)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Net.ContextAwareResult.Complete(IntPtr userToken)
   at System.Net.LazyAsyncResult.ProtectedInvokeCallback(Object result, IntPtr userToken)
   at System.Net.Sockets.BaseOverlappedAsyncResult.CompletionPortCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* nativeOverlapped)
   at System.Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* pOVERLAP)
Windows防火墙已禁用,没有安装其他防火墙。我已经使用netstat进行了检查,没有其他任何东西正在使用该端口。我尝试了其他5个随机端口,但仍然不起作用


我知道这个堆栈完全是为Vista重新编写的,所以有什么变化?Net是否应该隐藏所有这些差异?

调用
BeginReceive
的线程是否可能在某个点终止?这在Vista中有效,但在XP中不起作用;请参阅此内容和已接受答案的注释。

所有计算机上的.NET版本都相同?您是否已检查以确保所有.NET版本都相同?它们似乎都具有.NET 3.5 SP1。是的,线程终止。发现工具没有为BeginReceive使用线程,因此这一定是问题所在!