我正在开发.Net 4 C#应用程序来定位网络上的SSDP设备。我有以下代码通过Socket对象发送多播消息,要求网络上的设备识别自己。
using (var identificationRequest = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp))
{
identificationRequest.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership,new MulticastOption(multicastAddress));
identificationRequest.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastTimeToLive, 2);
identificationRequest.Connect(new IPEndPoint(multicastAddress, multicastPort));
var message = Encoding.UTF8.GetBytes(broadcastMessage);
identificationRequest.Send(message,0, message.Length, SocketFlags.None);
identificationRequest.Close();
}
这个代码在我运行它的前几次运行得很好,但是经过几次运行它就停止了工作。没有错误被抛出,但如果我启动Wireshark,我可以看到该数据包不再被发送。当发生这种情况时,让我再次工作的唯一方法就是重新启动计算机。
应用程序中没有循环,上面发布的代码是按用户要求调用的,所以它不像我有很多套接字对象。它通常在4-6次运行后死亡。
有什么想法吗?每次运行后我还应该做些什么来清理?
编辑:实际上看起来我不需要重新启动,如果我将其保留5分钟,它就会重新开始工作。