我使用的是用c ++构建的简单UDP接收器代码。我将我的机器升级到Windows 7,这条线现在因为UDP流未到达正在运行的可执行文件而被阻止:
iResult = recv(sock, RxBuf, buffsize, 0);
recv功能刚刚举行。我使用过wire shark来确保UDP流是活动的和正确的,但不知道问题是什么。
任何帮助都将不胜感激。
(广播UDP流)
答案 0 :(得分:1)
除非您将sock
设置为非阻止,否则recv()
将阻止,直到收到数据为止。因此,如果程序在那里阻塞,可能是因为它没有收到任何数据报。
在XP和7之间的Windows网络中,批次已更改,因此需要检查以下内容:
检查您的bind()
声明。确保您确实绑定了您认为自己的端口并且正在检查错误。
在Windows中关闭防火墙并不能完全禁用它。有许多组件,特别是在Vista及更高版本上,它们一直处于活动状态。
首次运行可执行文件时,Windows Vista及更高版本会要求您确认它应该具有网络访问权限。如果单击“允许”以外的任何内容,则该可执行文件的路径可能会被永久阻止。添加“允许”规则不会覆盖此块。要解除阻止,必须重新打开防火墙,然后深入查看“高级安全Windows防火墙”,从传入和传出中删除违规规则。你可能会对在那里积聚的东西感到惊讶。
您可能需要为正在侦听的UDP端口添加传入防火墙规则。即使防火墙已关闭。
要尝试的其他事项:禁用任何防病毒软件,以管理员身份运行您的侦听器,获取Wireshark或其他数据包嗅探器,以确保数据包真正到达计算机。