【发布时间】:2016-04-14 00:04:06
【问题描述】:
大家好
我正在测试此代码以供离线 LAN 使用,但如果发送方离线,则不会发送多播数据包(我的结论我对此表示怀疑)。
为了发现数据包,我使用了
Wireshark
有一个
“QUIC”协议过滤器
问题:
当我在线时(不管是哪个连接,只要我能上网),我的多播数据包就会被发送出去,
但是,当我断开互联网时,没有数据包被发送,当我连接到互联网时,数据包被发送。
因此,
- 互联网连接 -> 数据包已发送,
- 没有互联网连接 -> 没有发送数据包
更新
附注- 此代码应通过所有接口发送多播数据包
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();
【问题讨论】:
标签: c# sockets networking network-programming