Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从Android广播UDP数据包?_Java_Android_Networking_Udp - Fatal编程技术网

Java 如何从Android广播UDP数据包?

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

我需要使用UDP从我的Android应用程序向网络上的每个设备(以太网)广播一条消息。 但我不知道该怎么做,因为似乎没有任何关于如何发送广播消息的文档,只有关于如何使用IP地址发送到特定客户机的文档

谢谢

这是一份有用的文件:

下面是一个示例代码:

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);
这是一份有用的文件:

下面是一个示例代码:

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消除了广播,因为它具有侵入性,会中断局域网上的每台主机,而且是一个安全问题。现代的方法是多播。