我在基于C#.NET套接字的应用程序的发送端运行此代码:
const int port = 1110;
System.Net.Sockets.UdpClient udp = null;
udp = new System.Net.Sockets.UdpClient(host, port);
...
byte[] data = m.Serialize();
udp.Send(data, data.Length);
我在接收端运行此代码:
System.Net.IPEndPoint replyAddress = new System.Net.IPEndPoint(
System.Net.IPAddress.Any, port);
while ((udp != null) && (udp.Available > 0))
{
...
}
我在UDP端口1110上的接收端添加了(Windows 7)防火墙例外。但是,接收方代码永远不会进入while循环,除非我完全禁用了防火墙。为什么端口1110异常没有生效?使用Microsoft网络监视器,我可以看到尝试使用UDP:SrcPort = 1082, DstPort = 1110, Length = 11
之类的描述进入端口1110的消息(我认为网络监视器可以看到本地网络上的所有消息,而不仅仅是那些通过防火墙并且发往本地系统),但除非我完全禁用防火墙,否则我的应用程序永远不会收到它们。
我如何弄清楚这里发生了什么或修复它?我可以在循环中设置一个断点,并让另一方发送数据,当我禁用防火墙时,我点击断点,所以我知道流量可以通过,但防火墙的一些东西正在阻止它。我的防火墙异常如下所示:
答案 0 :(得分:1)
在进一步搜索防火墙规则后,我发现还有另一条规则是根据路径明确阻止接收程序。当Windows弹出一条关于想要访问网络的程序的消息时,我想你必须小心你的回应方式。我打算暂时禁止访问或取消操作(我当时还没打算运行程序)。但是,一旦我的回复,Windows添加了一个规则来永久阻止该程序的所有访问。删除这些规则允许UDP通信按预期通过防火墙。