当前位置: 首页 > 编程语言 > C#

C#应用程序未在UDPClient.Receive上接收数据包share

时间:2023-04-11 01:58:10 C#

C#应用程序未在UDPClient.Receive上接收数据包我遇到了一个似乎无法调试的奇怪问题。我的应用程序从通过特定端口发送UDP数据包的设备接收数据包。设置UDP侦听器后,while循环会定期触发Receive命令。我应该在每个给定的时间间隔收到400个值,我什至设置了一个流程来确保这些值通过。以下是相关代码的片段:publicUdpClientlistener;IPEndPointgroupEP=newIPEndPoint(IPAddress.Any,listenPort);//其中listenPort是一个int,其中包含应该从listener.ExclusiveAddressUse=false接收的端口值;listener.Client.SetSocketOption(SocketOptionLevel.Socket,SocketOptionName.ReuseAddress,true);listener.Client.Bind(groupEP);如果(listener.Client.Connected){listener.Connect(groupEP);}//我实际上从未见过该应用程序实际输入上面包含的代码}catch(Exceptionex){抛出ex;}}}}catch(SocketExceptionex){抛出ex;奇怪的是,该应用程序在我的PC上运行良好(通过安装文件/Installshield和VisualStudio),但在同事的计算机上运行安装文件时却没有收到任何数据(它在他的VisualStudio环境中运行良好).我还尝试将VisualStudio附加到应用程序的进程,我看到代码在到达listener.Receive之前运行良好。没有捕获到异常,VS中没有给出错误,但代码只是停止,因为没有收到数据。顺便说一句,两台机器是相同的(运行64位Windows7UltimateN的MacMini)。我什至在主程序中包含了一个UnhandledExceptionHandler,如下所示:AppDomain.CurrentDomain.UnhandledException+=newUnhandledExceptionEventHandler(CurrentDomain_UnhandledException);privatestaticvoidCurrentDomain_UnhandledException(objectsender,UnhandledExceptionEventArgse){MessageBox.Show("UnhandledExceptionCaught"+e.ToString());抛出新的NotImplementedException();这可能是Windows中的应用程序权限问题吗?关于确定问题的最佳方法的任何想法?UDP是一种无连接协议。不要连接。相反,您只是在传递数据包。此外,当您使用UdpClient时,不要深入挖掘底层套接字。无意义的。最简单(也是愚蠢)的UDP侦听器如下所示:varlistener=newUdpClient(54323,AddressFamily.InterNetwork);varep=default(IPEndPoint);while(!done){vardata=listener.Receive(refep);//Processthedata}使用ExclusiveAddressUse(和SocketOptionName.ReuseAddress)做所有事情只会隐藏你的问题。除非您使用广播或多播,否则只有该端口上的一个UDP侦听器会收到消息。这通常是一件坏事。如果这个简单的代码不起作用,请检查管道。防火墙、IP地址、驱动程序等。安装WireShark并检查UDP数据包是否实际通过-这可能是设备故障,可能是配置错误。此外,理想情况下,您希望异步执行所有这些操作。如果您有.NET4.5,这实际上很容易。如果您在WindowsVista或更高版本上运行此程序,则它可能是UAC。它悄悄地阻止套接字正常工作。如果关闭UAC级别,它不仅会阻塞套接字。以上是C#学习教程:C#应用不接收UDPClient.Receive上共享数据包的全部内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注。本文来自网络收藏,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处: