我正在使用 C++ 中构建的简单 UDP 接收器代码。我将我的机器升级到 Windows 7,由于 UDP 流没有进入运行的可执行文件,所以这条线现在被搁置了:
iResult = recv(sock, RxBuf, buffsize, 0);
recv 函数只是暂停了。我使用了wire Shark来确保UDP流是活动的并且是正确的,但不知道问题是什么。
任何帮助,将不胜感激。
(UDP 流被广播)
除非您已设置sock
为非阻塞,recv()
否则将阻塞直到接收到数据。因此,如果程序在那里阻塞,可能是因为它没有收到任何数据报。
XP 和 7 之间的 Windows 网络发生了很大变化,所以这里有一些事情需要检查:
检查你的bind()
陈述。确保您确实绑定了您认为的端口并且您正在检查错误。
简单地关闭 Windows 中的防火墙并不能完全禁用它。有许多组件,尤其是在 Vista 和更高版本上,它们一直处于活动状态。
当您第一次运行可执行文件时,Windows Vista 及更高版本将要求您确认它应该具有网络访问权限。如果您单击“允许”以外的任何内容,则该可执行文件的路径可能会被永久阻止。添加“允许”规则不会覆盖此块。要取消阻止,您必须重新打开防火墙,然后深入到“具有高级安全性的 Windows 防火墙”以从传入和传出中删除违规规则。您可能会惊讶于那里可以建立的东西。
您可能需要为正在侦听的 UDP 端口添加传入防火墙规则。即使防火墙关闭。
其他要尝试的事情:禁用任何防病毒软件,以管理员身份运行侦听器,获取 Wireshark 或其他数据包嗅探器以确保数据包确实到达机器。