std*_*all 6 java udp broadcasting
我正在尝试在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");
}
}
Run Code Online (Sandbox Code Playgroud)
好的,我找到了答案.Windows 7不再支持255.255.255.255广播,显然它是对各种威胁的开放.要进行广播,需要使用不同的方法.
这是维基百科的一个小型表达:
可以通过在子网掩码的位补码和主机的IP地址之间执行按位逻辑"或"运算来获得IPv4主机的广播地址.示例:使用私有IP地址空间100.16.0.0/12(包含子网掩码255.240.0.0)将数据包广播到整个IPv4子网,广播地址为:100.16.0.0 | 0.15.255.255 = 100.31.255.255.
IP广播地址255.255.255.255存在特殊定义.它是零网络的广播地址或0.0.0.0,在因特网协议标准中代表该网络,即本地网络.到该地址的传输受到定义的限制,因为它永远不会被连接本地网络到因特网的路由器转发.
| 归档时间: |
|
| 查看次数: |
4423 次 |
| 最近记录: |