我有以下代码发送多路广播消息,然后等待响应发送到消息来自的地址。如果我观察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