我知道很多次都会问过这个问题 . 我已经阅读了所有答案并尝试了一些我能找到的代码 . 几天后,我非常绝望,我不得不向你寻求帮助 .
我的家庭网络中有一台设备和一台PC . 设备发送UDP广播消息 . 在我的电脑上,我可以在wireshark中看到这些消息:
来源目的地长度
192.168.1.102 0.0.0.0 UDP 60源端口:9050目标端口:0
这意味着数据包到达我的PC . 我的下一步是创建一个接收这些数据包的C#应用程序 . 如上所述,我尝试了所有可能的解决方案,但它不会收到任何东西 .
所以我想必须有一些非常基本的我做错了 . 谁能帮我吗?谢谢!
2 回答
刚遇到同样的问题,想分享为我修复的问题 .
简而言之:似乎Windows防火墙在某种程度上是造成这种奇怪行为的原因,只是禁用该服务并没有帮助 . You have to explicitly allow incoming UDP packets for specific program (executable) in Windows Firewall inbound rules list.
有关完整的案例描述,请继续阅读 .
我的网络设置是:我的(接收)机器的IP是192.168.1.2,发送机器的IP是192.168.1.50,两台机器上的子网掩码是255.255.255.0 . 我的机器运行的是Windows 7 x64 .
这是我使用的代码(大致):
最初,在我打电话给
ReceiveFrom
之前,这不起作用 unless I sent a broadcast packet from that socket . 即在ReceiveFrom
之前添加此行:当我没有首先从接收套接字发送广播数据包时,它没有收到传入的广播数据包,即使它们出现在Wireshark中(数据包的目的地是255.255.255.255) .
我认为看起来好像防火墙正在搞乱传入的数据包(除非首先通过传出数据包打开某种UDP漏洞 - 即使我之前没有听说UDP漏洞以某种方式应用于广播数据包),所以 I went to services and disabled Windows firewall service altogether. This changed nothing.
但是,在尝试其他所有内容后,我重新启用了防火墙服务,并尝试再次运行该程序 . 这一次,防火墙提示出现问我是否要通过防火墙允许MyProgram.vshost.exe进程(我在Visual Studio中调试),我接受了它,瞧 - 一切正常!现在收到传入的数据包!
你没关系,他们在代码中有一些连线导致问题 . (我没看过文章,只是复制粘贴)
它始终可以在本地计算机上运行,但是从远程计算机上它会因某些原因而失败 .
解决这个问题:在Broadcst.cs中,他们播放了两次 . 一次用于localhost,然后用于目标IP地址(iep2) . 简单地删除
它应该工作 .
不知道为什么 .