udp广播报文(udp 广播)

udp广播报文(udp 广播)1 AndroidManif xml 文件中添加网络权限 2 获取网卡 IP 地址 将末尾改成 255 作为广播发送地址 public static List lt String gt adds new ArrayList lt gt public static void resetAdds adds clear try

大家好,我是讯享网,很高兴认识大家。



1.AndroidManifest.xml文件中添加网络权限

2.获取网卡IP地址,将末尾改成.255,作为广播发送地址

public static List<String> adds = new ArrayList<>();

public static void resetAdds() {

       adds.clear();

       try {

           Enumeration<NetworkInterface> enumeration = NetworkInterface.getNetworkInterfaces();

           if (enumeration != null) {

               while (enumeration.hasMoreElements()) {

                   NetworkInterface wf = enumeration.nextElement();

                   Enumeration<InetAddress> ei = wf.getInetAddresses();

                   if (ei != null) {

                       while (ei.hasMoreElements()) {

                           InetAddress ia = ei.nextElement();

                           if (!ia.isLoopbackAddress()) {

                               String address = ia.getHostAddress();

                               if (address != null && address.indexOf(":") == -1) {

                                   for (int i = address.length() - 2; i >= 0; i–) {

                                       if (address.charAt(i) == ‘.’) {

                                           adds.add(address.substring(0, i) + ".255");

                                           break;

                                       }

                                   }

                               }

                           }

                       }

                   }

               }

           }

       } catch (Exception e) {

           e.printStackTrace();

       }

   }

3.用线程发送udp广播

public static void udpSend(byte[] data) {

       new Thread() {

           @Override

           public void run() {

               DatagramSocket socket = null;

               try {

                   socket = new DatagramSocket();


讯享网

                   for (int i = 0; i < UdpSendService.adds.size(); i++) {

                       DatagramPacket packet = new DatagramPacket(data, data.length, InetAddress.getByName(UdpSendService.adds.get(i)), UdpSendService.portNumber);

                       socket.send(packet);

                   }

socket.close();

               } catch (Exception e) {

e.printStackTrace();

               } finally {

                   if (socket != null) {

                       socket.close();

                   }

               }

           }

       }.start();

   }

4.用线程接收udp广播

public static void udpReceive() {

       for (int i = 0; i < adds.size(); i ++) {

           int finalI = i;

           new Thread() {

               @Override

               public void run() {

                   DatagramSocket socket = null;

                   try {

                       socket = new DatagramSocket(portNumber, InetAddress.getByName(adds.get(finalI)));

                       byte[] buffer = new byte[4096];

                       DatagramPacket packet = new DatagramPacket(buffer, buffer.length);

                       while (true) {

                           socket.receive(packet);

                           String message = new String(packet.getData(), 0, packet.getLength());

                            Log.d("test_udp_receive", "result:" + message);

                       }

                   } catch (Exception e) {

                       e.printStackTrace();

                   } finally {

                       if (socket != null) {

                           socket.close();

                       }

                   }

               }

           }.start();

       }

   }

小讯
上一篇 2025-04-30 09:20
下一篇 2025-04-26 14:34

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/167008.html