マルチキャストメッセージを送信し、メッセージが送信されたアドレスに応答が送信されるのを待つ次のコードがあります。 Wiresharkのトラフィックを見ると、メッセージが正常に送信され、応答が正しいIPとポートに戻ってきますが、ソケットが受信ラインから返ってくることはありません。応答が取得されていないようです。メッセージを送信して同じソケットで応答を受信する方法
var multicastAddress = IPAddress.Parse("239.255.255.250");
var multicastPort = 1900;
var unicastPort = 1901;
using (var socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp))
{
socket.Bind(new IPEndPoint(IPAddress.Any, unicastPort));
socket.Connect(new IPEndPoint(multicastAddress, multicastPort));
var thd = new Thread(() =>
{
try
{
while (true)
{
var response = new byte[8000];
EndPoint ep = new IPEndPoint(IPAddress.Any, unicastPort);
socket.ReceiveFrom(response, ref ep);
var str = Encoding.UTF8.GetString(response);
Devices.Add(new SsdpDevice() {Location = str});
}
}
catch
{
//TODO handle exception for when connection closes
}
});
socket.Send(broadcastMessage, 0, broadcastMessage.Length, SocketFlags.None);
thd.Start();
Thread.Sleep(30000);
socket.Close();
}
私は、ソケットクラスの非同期メソッドを使用する必要があります知っているとのThread.sleepに頼る停止必要がありますが、私はちょうど私がコードを片付ける前に、簡単な例作業を取得したいです。
あなたの空の漁獲量は、実際にエラーをキャッチしていますか? – Smudge202
接続が閉じられ、応答を待っているときにSocketExceptionがスローされます。 – Gavin