我有一个服务器和一个通过UDP套接字相互通信的客户端。服务器正在打开端口10002并正在侦听传入的数据报。
对于客户端获取服务器ip,它会发送一个服务器响应的广播数据报。负责查找服务器IP地址的客户端代码如下所示:
private IPEndPoint GetServerEP(TimeSpan timeout, UdpClient udpclient)
{
IPEndpoint server = new IPEndPoint(IPAddress.Broadcast, 10002);
byte[] data = GetDiscoverDatagram();
_udpclient.EnableBroadcast = true;
udpclient.Send(data, data.Length, server);
try
{
udpclient.Client.ReceiveTimeout = (int)timeout.TotalMilliseconds;
udpclient.Receive(ref server);
}
catch (SocketException e)
{
string msg = string.Format("Server did not respond within {0} ms", timeout.TotalMilliseconds);
throw new TimeoutException(msg, e);
}
return server;
}
运行此操作后,我可以看到服务器实际上接收到广播数据报,并使用绑定到客户端发送的同一端口的数据包进行响应。但是,客户端不会收到任何内容和超时。
我错过了什么?
答案 0 :(得分:0)
愚蠢的我(或;愚蠢的防火墙)。代码工作正常,但防火墙阻止了来自服务器的响应数据包。禁用之后一切都像魅力一样。