我有以下代碼發送多路廣播消息,然後等待響應發送到消息來自的地址。如果我觀察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但我只是希望得到一個簡單的例子,之前的工作我整理代碼。
請問你空的catch實際上捕獲錯誤? – Smudge202 2012-02-24 08:11:42
當連接關閉並且仍在等待響應時拋出SocketException – Gavin 2012-02-24 08:15:43