我正在开发一个基于c#的应用程序,它使用Multi-casting连续发送消息。一切都很好。接收端的客户端不断接收消息,直到网络断开。但是,当我重新连接网络时,同一网络上的客户端计算机不会收到任何消息,直到我通过接收代码收集同一台计算机上的所有消息。
发送代码:
using (UdpClient udpclient = new UdpClient())
{
IPAddress multicastaddress = IPAddress.Parse("239.0.0.222");
try
{
udpclient.ExclusiveAddressUse = false;
udpclient.MulticastLoopback = false;
udpclient.JoinMulticastGroup(multicastaddress);
IPEndPoint remoteep = new IPEndPoint(multicastaddress, 8191);
int j = udpclient.Send(byteBuffer, byteBuffer.Length, remoteep);
}
catch (Exception e)
{
udpclient.DropMulticastGroup(multicastaddress);
udpclient.Close();
}
finally
{
udpclient.DropMulticastGroup(multicastaddress);
udpclient.Close();
}
});
接收代码:
var udpClientDispose = new UdpClient(_settingsViewModel.SyncPort);
var ipEndPoint = new IPEndPoint(IPAddress.Any, 8191);
IPAddress multicastaddress = IPAddress.Parse("239.0.0.222");
udpClientDispose.JoinMulticastGroup(multicastaddress, "192.168.0.12");
var timeElapsedSinceMasterMessageReceived = new Stopwatch();
Stopwatch sw = new Stopwatch();
sw.Start();
while (sw.ElapsedMilliseconds < 5000)
{
udpClientDispose.Receive(ref ipEndPoint);
}
udpClientDispose.Close();`
似乎所有消息都在我的系统中收集,并且特定多播地址上存在网络堵塞,即“239.0.0.222”。好像我试图改变它的工作地址而不是“239.0.0.222”。
任何人都知道发生这种情况的确切原因以及任何有效的解决方案。
答案 0 :(得分:0)
当您说“网络已断开连接”时,我将假设您禁用了NIC或物理拔下电线。
如果您订阅了多播组,则会指示NIC驱动程序侦听来自特定MAC地址的流量。当链路断开或NIC被禁用时,NIC驱动程序将停止侦听该多播组,您必须手动重新订阅。
如果NIC上升/下降并使用它来相应地重新订阅,您可以使用NetworkInformation类订阅事件信息。