c# - 离线时未发送多播数据包

时间:2016-01-09 09:20:27

标签: c# sockets networking network-programming

美好的一天

我正在测试此代码以供离线局域网使用,但如果发件人处于离线状态,则不会发送多播数据包(我的结论是我怀疑的。)

为了发现数据包,我使用

  

的Wireshark

  

“QUIC”协议过滤器

问题:

当我在线时(无论哪个连接,只要我有互联网访问权限),我的多播数据包就会被发送,

但是,当我从互联网断开连接时,没有发送数据包,然后当我连接到互联网时,会发送数据包。

因此,

  • 互联网连接 - >数据包已发送,
  • 没有互联网连接 - >没有发送数据包

已更新

P.S。 - 此代码应通过所有接口发送多播数据包

IPAddress_MultiIP = IPAddress.Parse("224.0.0.3");

   Socket _listener_socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
            foreach (IPAddress localIP in Dns.GetHostAddresses(Dns.GetHostName()).Where(i => i.AddressFamily == AddressFamily.InterNetwork))
            {
                //handle image and files                
                _listener_socket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(_MultiIP/*, localIP*/));
                _listener_socket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastTimeToLive, 1);
                _listener_socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
                _listener_socket.MulticastLoopback = true;
                _listener_socket.Connect(new IPEndPoint(_MultiIP, _PORT));
                //send data to multicast group
                string message_to_send = _IPADDRESS.ToString() + "~m~" + _MESSAGE + "\n";
                byte[] bytes = new byte[message_to_send.Length * sizeof(char)];
                System.Buffer.BlockCopy(message_to_send.ToCharArray(), 0, bytes, 0, bytes.Length);
                _listener_socket.Send(bytes, bytes.Length, SocketFlags.None);
            }
            _listener_socket.Close();

1 个答案:

答案 0 :(得分:0)

对于它的价值,系统重启似乎解决了这个问题???

我不知道是什么原因导致了这一点。

如果您遇到此问题,请尝试重置适配器,否则重启并报告。

希望这有帮助