C# 用C语言接收UDP广播消息#

C# 用C语言接收UDP广播消息#,c#,udp,broadcast,wireshark,udpclient,C#,Udp,Broadcast,Wireshark,Udpclient,我知道这个问题已经被问过很多次了。我已经阅读了所有的答案,并尝试了我能找到的每一段代码。过了几天,我非常绝望,不得不向你求助 我的家庭网络中有一台设备和一台电脑。设备发送UDP广播消息。在我的电脑上,我可以在wireshark中看到这些消息: 源目标长度 192.168.1.102 0.0.0.0 UDP 60源端口:9050目标端口:0 这意味着数据包将到达我的PC。我的下一步是创建一个接收这些数据包的C#应用程序。如上所述,我尝试了所有可能的解决方案,但它不会收到任何效果 所以我想一定有一些

我知道这个问题已经被问过很多次了。我已经阅读了所有的答案,并尝试了我能找到的每一段代码。过了几天,我非常绝望,不得不向你求助

我的家庭网络中有一台设备和一台电脑。设备发送UDP广播消息。在我的电脑上,我可以在wireshark中看到这些消息:

源目标长度

192.168.1.102 0.0.0.0 UDP 60源端口:9050目标端口:0

这意味着数据包将到达我的PC。我的下一步是创建一个接收这些数据包的C#应用程序。如上所述,我尝试了所有可能的解决方案,但它不会收到任何效果

所以我想一定有一些很基本的事情我做错了。
有人能帮我吗?谢谢

你没事,他们的代码中有导致问题的东西。(我没有读这篇文章,只是复制粘贴)

它总是在本地机器上工作,但在远程机器上,它会由于某种原因而失败

要解决此问题,请执行以下操作: 在Broadcst.cs中,他们广播了两次。一次用于本地主机,然后用于目标IP地址(iep2)。只需移除

sock.SendTo(data, iep1);  
它应该会起作用


不知道为什么。

只是遇到了同样的问题,想和大家分享一下是什么为我解决了这个问题

简而言之:Windows防火墙似乎是导致这种奇怪行为的原因,仅仅禁用该服务并没有帮助您必须在Windows防火墙入站规则列表中明确允许特定程序(可执行文件)的传入UDP数据包。

有关完整的案例描述,请继续阅读

我的网络设置是:我的(接收)机器的IP是192.168.1.2,发送机器的IP是192.168.1.50,两台机器上的子网掩码都是255.255.255.0。 我的机器运行的是Windows 7 x64

这是我(大致)使用的代码:

Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
IPEndPoint iep = new IPEndPoint(IPAddress.Any, 0);
sock.Bind(iep);
sock.EnableBroadcast = true;
EndPoint ep = (EndPoint)iep;
byte[] buffer = new byte[1000];
sock.ReceiveFrom(buffer, ref ep);
最初,除非在调用
ReceiveFrom
之前,我从该套接字发送了一个广播数据包,否则该功能不起作用。也就是说,在
ReceiveFrom
call之前添加此行:

sock.SendTo(someData, new IPEndPoint(IPAddress.Broadcast, somePort))
当我没有首先从接收套接字发送广播数据包时,传入的广播数据包没有被接收,即使它们出现在Wireshark中(数据包的目的地是255.255.255.255)

我认为防火墙似乎在干扰传入的数据包(除非传出的数据包首先打开某种UDP漏洞——尽管我以前没有听说UDP打孔会以某种方式应用于广播数据包),所以我转到服务并完全禁用了Windows防火墙服务。这并没有改变任何事情。


但是,在尝试了所有其他操作之后,我重新启用了防火墙服务,并尝试再次运行该程序。这一次,出现了防火墙提示,询问我是否允许MyProgram.vshost.exe进程(我在Visual Studio中调试)通过防火墙,我接受了它,瞧,一切正常!正在接收传入的数据包

你能发布你用来监听数据包的代码吗?我试过了:和任何活动防火墙的代码?我不确定Wireshark在哪里拦截这些包,但可能是防火墙在事后阻止了它们。不,我只使用Windows防火墙。在我开始测试之前,它就被关闭了。