【发布时间】:2014-10-22 00:02:41
【问题描述】:
我一直在制作一个示例程序,其中用户可以使用 sockets 和 UDP 连接来广播消息。它在 LAN 中成功,但我无法将我的消息广播到其他网络(例如 10.15.1.11 的消息到 10.11.1.23)。这是我的示例代码:
听众:
bworker = 作为 BackgroundWorker 的发送者;
Socket _ListenerSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
IPEndPoint _ListenerEndPoint = new IPEndPoint(IPAddress.Any, _port);
_ListenerSocket.EnableBroadcast = true;
_ListenerSocket.Bind(_ListenerEndPoint);
//_ListenerSocket.Connect(MulticastIP, _port);
_ListenerSocket.Ttl = 255;
_ListenerSocket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(MulticastIP));
while (true)
{
byte[] msg = new byte[1024];
_ListenerSocket.Receive(msg);
string StringData = Encoding.Unicode.GetString(msg);
bworker.ReportProgress(0, StringData);
}
发件人:
Socket _ClientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
_ClientSocket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(MulticastIP));
_ClientSocket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastTimeToLive, int.Parse(ttl));
IPEndPoint _ClientEndPoint = new IPEndPoint(MulticastIP, _port);
_ClientSocket.Connect(_ClientEndPoint);
byte[] MsgByte = new byte[1024];
MsgByte = Encoding.Unicode.GetBytes(txtmsg.Text);
_ClientSocket.Send(MsgByte);
变量:
public const int _port = 8041;
public const string ttl = "255";
public IPAddress MulticastIP = IPAddress.Parse("239.0.0.222");
谢谢。
【问题讨论】:
-
您和其他 LAN 之间的路由器可能拒绝转发具有多播目标 IP 的数据包。
-
嗨,有没有办法检查我和其他局域网之间的路由器是否拒绝转发数据包?谢谢。
-
最简单的方法是将数据包发送到单播目标(目标机器的实际IP地址),然后检查它是否到达。
-
我想 ping 目的地是一种方法。目的地可以接收数据包。但它仍然无法接收我的消息。
-
您可以简单地尝试将 IPEndPoint 中的 ip 更改为目标的 IP。 Ping 使用完全不同的消息,因此它不会告诉您问题是否与多播目标有关。
标签: c# sockets networking udp send