使用套接字将UDP消息发送到另一个网络

时间:2014-08-28 07:50:13

标签: c# sockets networking udp send

我一直在制作一个示例程序,用户可以使用套接字 UDP 连接来广播消息。它在局域网上取得了成功,但我不能将我的消息广播到其他网络(例如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");

感谢。

2 个答案:

答案 0 :(得分:0)

您和其他LAN之间的路由器可能拒绝转发具有多播目标IP的数据包。为了正确处理组播,路由器本身必须是组播感知的,并实现PIM(用于协调路由器之间的组播)和IGMP(用于协调与终端主机的组播)等协议

答案 1 :(得分:0)

您的路由器可能无法转发多播包。为了使多播工作,通信路径上的所有路由器都必须启用多播。 Ping只需要路由器转发ping包,这样只会告诉你是否可以访问其他计算机。请查看this文章,了解有关C#中多播的更多信息。