Java 如何从Android广播UDP数据包?
我需要使用UDP从我的Android应用程序向网络上的每个设备(以太网)广播一条消息。 但我不知道该怎么做,因为似乎没有任何关于如何发送广播消息的文档,只有关于如何使用IP地址发送到特定客户机的文档 谢谢这是一份有用的文件: 下面是一个示例代码: 1-发送者Java 如何从Android广播UDP数据包?,java,android,networking,udp,Java,Android,Networking,Udp,我需要使用UDP从我的Android应用程序向网络上的每个设备(以太网)广播一条消息。 但我不知道该怎么做,因为似乎没有任何关于如何发送广播消息的文档,只有关于如何使用IP地址发送到特定客户机的文档 谢谢这是一份有用的文件: 下面是一个示例代码: 1-发送者 public void sendBroadcast(String messageStr) { StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder
public void sendBroadcast(String messageStr) {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
try {
DatagramSocket socket = new DatagramSocket();
socket.setBroadcast(true);
byte[] sendData = messageStr.getBytes();
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, getBroadcastAddress(), Constants.PORT);
socket.send(sendPacket);
System.out.println(getClass().getName() + "Broadcast packet sent to: " + getBroadcastAddress().getHostAddress());
} catch (IOException e) {
Log.e(TAG, "IOException: " + e.getMessage());
}
}
InetAddress getBroadcastAddress() throws IOException {
WifiManager wifi = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE);
DhcpInfo dhcp = wifi.getDhcpInfo();
int broadcast = (dhcp.ipAddress & dhcp.netmask) | ~dhcp.netmask;
byte[] quads = new byte[4];
for (int k = 0; k < 4; k++)
quads[k] = (byte) ((broadcast >> k * 8) & 0xFF);
return InetAddress.getByAddress(quads);
这是一份有用的文件:
下面是一个示例代码:
1-发送者
public void sendBroadcast(String messageStr) {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
try {
DatagramSocket socket = new DatagramSocket();
socket.setBroadcast(true);
byte[] sendData = messageStr.getBytes();
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, getBroadcastAddress(), Constants.PORT);
socket.send(sendPacket);
System.out.println(getClass().getName() + "Broadcast packet sent to: " + getBroadcastAddress().getHostAddress());
} catch (IOException e) {
Log.e(TAG, "IOException: " + e.getMessage());
}
}
InetAddress getBroadcastAddress() throws IOException {
WifiManager wifi = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE);
DhcpInfo dhcp = wifi.getDhcpInfo();
int broadcast = (dhcp.ipAddress & dhcp.netmask) | ~dhcp.netmask;
byte[] quads = new byte[4];
for (int k = 0; k < 4; k++)
quads[k] = (byte) ((broadcast >> k * 8) & 0xFF);
return InetAddress.getByAddress(quads);
使用广播IP地址。请记住,广播不会跨越路由器,因此只能在所连接的网络上广播。可以使用一个广播地址:
255.255.255.255
的有限广播地址。它可以在每一个IPv4网络上工作,并且没有真正的理由花费大量的周期来计算网络广播地址。当然,广播只适用于IPv4,因为IPv6消除了广播,因为它具有侵入性,会中断局域网上的每台主机,而且是一个安全问题。现代的方法是多播。使用广播IP地址。请记住,广播不会跨越路由器,因此只能在所连接的网络上广播。可以使用一个广播地址:255.255.255.255
的有限广播地址。它可以在每一个IPv4网络上工作,并且没有真正的理由花费大量的周期来计算网络广播地址。当然,广播只适用于IPv4,因为IPv6消除了广播,因为它具有侵入性,会中断局域网上的每台主机,而且是一个安全问题。现代的方法是多播。嗯,这包括“wifi管理器”。这可以通过以太网实现吗?可以使用一个广播地址:有限的广播地址255.255.255.255
。它可以在每一个IPv4网络上工作,并且没有真正的理由花费大量的周期来计算网络广播地址。当然,广播只适用于IPv4,因为IPv6消除了广播,因为它具有侵入性,会中断局域网上的每台主机,而且是一个安全问题。现代的方法是多播。嗯,这包括“wifi管理器”。这可以通过以太网实现吗?可以使用一个广播地址:有限的广播地址255.255.255.255
。它可以在每一个IPv4网络上工作,并且没有真正的理由花费大量的周期来计算网络广播地址。当然,广播只适用于IPv4,因为IPv6消除了广播,因为它具有侵入性,会中断局域网上的每台主机,而且是一个安全问题。现代的方法是多播。