0

我正在使用 C++ 中构建的简单 UDP 接收器代码。我将我的机器升级到 Windows 7,由于 UDP 流没有进入运行的可执行文件,所以这条线现在被搁置了:

  iResult = recv(sock, RxBuf, buffsize, 0);

recv 函数只是暂停了。我使用了wire Shark来确保UDP流是活动的并且是正确的,但不知道问题是什么。

任何帮助,将不胜感激。

(UDP 流被广播)

4

1 回答 1

1

除非您已设置sock为非阻塞,recv()否则将阻塞直到接收到数据。因此,如果程序在那里阻塞,可能是因为它没有收到任何数据报。

XP 和 7 之间的 Windows 网络发生了很大变化,所以这里有一些事情需要检查:

  • 检查你的bind()陈述。确保您确实绑定了您认为的端口并且您正在检查错误。

  • 简单地关闭 Windows 中的防火墙并不能完全禁用它。有许多组件,尤其是在 Vista 和更高版本上,它们一直处于活动状态。

  • 当您第一次运行可执行文件时,Windows Vista 及更高版本将要求您确认它应该具有网络访问权限。如果您单击“允许”以外的任何内容,则该可执行文件的路径可能会被永久阻止。添加“允许”规则不会覆盖此块。要取消阻止,您必须重新打开防火墙,然后深入到“具有高级安全性的 Windows 防火墙”以从传入和传出中删除违规规则。您可能会惊讶于那里可以建立的东西。

  • 您可能需要为正在侦听的 UDP 端口添加传入防火墙规则。即使防火墙关闭。

  • 其他要尝试的事情:禁用任何防病毒软件,以管理员身份运行侦听器,获取 Wireshark 或其他数据包嗅探器以确保数据包确实到达机器。

于 2012-08-14T21:12:58.060 回答