6

我正在尝试在 IP 地址“255.255.255.255”上发送 UDP 广播,以便在我的网络中发现设备。该程序执行,但我在 Wireshark 中看不到任何内容。当我将 IP 地址更改为网络中的已知 IP 时,我可以在 Wireshark 中看到数据包。这是怎么回事 ?

这是我的代码:

public static void main(String args[]) throws Exception
{
    String Broadcastaddress = new String("255.255.255.255");
    int port = 9876;
    DatagramSocket serverSocket = new DatagramSocket();
    serverSocket.setBroadcast(true);
    InetAddress IPAddress = InetAddress.getByName(Broadcastaddress);
    System.out.println("Sending Discovery message to " + IPAddress + "Via UDP port " + port);

    byte[] sendData = new byte[4];
    sendData[0] = 'F';
    sendData[1] = 'I';
    sendData[2] = 'N';
    sendData[3] = 'D';

    DatagramPacket sendPacket = new DatagramPacket(sendData,sendData.length,IPAddress,port);

    while (true)
    {
        serverSocket.send(sendPacket);
        System.out.println("Packet sent");
    }


}
4

1 回答 1

5

好的,我找到了答案。Windows 7 不再支持 255.255.255.255 广播,显然这是对各种威胁的开放。要广播,需要使用不同的方法。

这是维基百科的一个小解释:

IPv4 主机的广播地址可以通过在子网掩码的位补码和主机​​的 IP 地址之间执行按位逻辑或运算来获得。示例:使用私有 IP 地址空间 100.16.0.0/12 将数据包广播到整个 IPv4 子网,其子网掩码为 255.240.0.0,广播地址为:100.16.0.0 | 0.15.255.255 = 100.31.255.255。

IP 广播地址 255.255.255.255 存在一个特殊定义。它是零网络的广播地址或0.0.0.0,在互联网协议标准中代表这个网络,即本地网络。根据定义,到该地址的传输受到限制,因为它永远不会被将本地网络连接到 Internet 的路由器转发。

于 2011-09-27T08:04:41.197 回答