UDP ソケットを介して相互に通信するサーバーとクライアントがあります。サーバーはポート 10002 を開き、着信データグラムをリッスンしています。
クライアントがサーバー IP を取得するために、サーバーが応答する 1 つのブロードキャスト データグラムを送信します。サーバーの 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;
}
これを実行すると、サーバーが実際にブロードキャスト データグラムを受信し、クライアントの送信元と同じポートにバインドされたパケットで応答することがわかります。ただし、クライアントは何も受信せず、タイムアウトします。
私は何が欠けていますか?