【问题标题】:C# socket net directed broadcastC# socket net 定向广播
【发布时间】:2013-07-29 19:18:24
【问题描述】:

我有几个 LAN (10.0.0.x) 连接到 WAN (192.168.1.x)。每个都通过一个允许网络定向广播的路由器。这是为了让 WAN 上的设备能够发现 LAN 中的设备。

我可以在 LAN(10.0.0.255) 上发送广播并在我的套接字上接收它。但是当我移动到广域网时,我可以在wireshark中看到它,但不是我的套接字。换句话说,我有一个地址为 10.0.0.1 的设备通过网关向 192.168.1.255 发送相同的消息,但我的套接字没有接收到它。当这种情况发生时,源地址是路由器的地址。这是我的套接字的代码:

                    udpSocket = new Socket(AddressFamily.InterNetwork,
                        SocketType.Dgram, ProtocolType.Udp);

                    //Assign the any IP of the machine and listen on port number 5000
                    IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Any, 5000);

                    //Bind this address to the server
                    udpSocket.Bind(ipEndPoint);

                    IPEndPoint ipeSender = new IPEndPoint(IPAddress.Any, 5000);
                    //The epSender identifies the incoming clients
                    EndPoint epSender = (EndPoint)ipeSender;

                    //Start receiving data
                    udpSocket.BeginReceiveFrom(byteData, 0, byteData.Length,
                        SocketFlags.None, ref epSender, new AsyncCallback(ReceiveAnnounce), epSender);

我对每条消息都有一个wireshark 跟踪,但我不确定发布它的最佳方式。谢谢。

【问题讨论】:

    标签: c# sockets networking udp wireshark


    【解决方案1】:

    您了解 UDP 不保证一定会收到数据包吗? (TCP 使用客户端到服务器的连接)并且数据包被广播到“多播组”(这类似于 IP 地址,但必须在 224.0.0.0239.255.255.255 的范围内)而不是 IP。

    您对IPAddress.Any 的使用告诉它使用所有网络接口,但您从未告诉它使用哪个多播组,我自己从未在 C# 中这样做过,但是您似乎想在之前添加这行代码您的 BeginReceiveFrom;

    udpSocket.SetSocketOption(SocketOptionLevel.IP,SocketOptionName.AddMembership,new MulticastOption(TARGET_IP)); 
    

    您应该将TARGET_IP 替换为您希望收听的多播组的地址。

    我从这个站点获取了那行代码; http://osix.net/modules/article/?id=409

    【讨论】:

    • 我了解 UDP 的作用,但我确实想要广播,而不是多播。这用于发现 LAN 和路由器后面的控制器。这就是为什么我需要向广域网广播。我不会发送太多这样的数据,只是一条公告消息。
    • 这不会改变您没有附加到多播组的点,这是 UDP 的必要部分(否则您的数据包将与通过您的网卡的所有其他 UDP 数据包一起)。 en.wikipedia.org/wiki/Multicast
    • 我想我很困惑。如果它来自同一个 LAN,我创建的套接字正在接收消息。在这两种情况下,我都将消息发送到广播地址并且没有设置多播组。我相信端口会阻止它接收所有的 UDP 数据包,但我想有可能接收端口上的所有 UDP 数据。
    • 如果您可以使用wireshark 看到数据包,但无法通过您的应用程序接收它,我能看到的唯一解释是多播组配置错误。我刚刚在调查时发现了这个“IP广播地址255.255.255.255存在一个特殊定义。它是零网络或0.0.0.0的广播地址,在互联网协议标准中代表这个网络,即“你的 IPADDRESS.ALL 是 0.0.0.0
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-12
    • 2013-08-30
    • 2019-05-31
    • 1970-01-01
    • 2012-07-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多