在 android 中使用 UDP 向特定 ip 和端口发送和接收数据

sending and receiving data to particular ip and port using UDP in android

正在尝试将数据发送到特定端口的特定 IP 地址。但是硬件设备没有响应。下面是我的代码。同样的事情在 iOS.but 在 androidd tt throw socket timeout exception 中正常工作。

    DatagramSocket sendSoc = null;
            DatagramPacket packet = null;
            try {
                sendSoc = new DatagramSocket(WIPHONEPORT);//2739
                sendSoc.setBroadcast(true);
                sendSoc.setSoTimeout(5000);

                InetSocketAddress address = new InetSocketAddress(InetAddress.getByName(deviceSignature.getDeviceIP()), WIPHONEPORT);

                byte[] ip = object.ToBuffer();
                Log.d("data", ip.length + "##" + Arrays.toString(ip));
                packet = new DatagramPacket(ip,
                        ip.length, address.getAddress(), address.getPort());

            } catch (IOException e) {
                Log.d("error","could not able to send packet");
                return;
            }


            WiphoneProp prop;
            boolean canLoop = true;
            int i = 0;
            ////////////
            while (canLoop) {
                try {

                    sendSoc.send(packet);
                    try {
                        byte buf[] = new byte[1024];
                        DatagramPacket pack = new DatagramPacket(buf, buf.length);
                        sendSoc.receive(pack);
                        if (pack.getData() != null) {
                            if (!pack.getAddress().equals(getLocalIp())) {
                                prop = new WiphoneProp(pack.getData());
                                prop.validate();
                                canLoop=false;
                                Log.d("bytearray", Arrays.toString(pack.getData()));
                                Log.d("address ", pack.getAddress().getHostAddress() + " @@ " + pack.getAddress().getHostName() + " @@ " + pack.getAddress().getCanonicalHostName());
                                Log.d("result", prop.getWiphoneName());

                            }
                        }
                    } catch (UnknownHostException e) {
                        Log.d("UnknownHostException", "UnknownHostException");


                    }
                } catch (IOException e) {
                    Log.d("SocException", "IOException");

                }
                i++;
            }

请帮帮我。如果您不清楚请在这里评论。

我通过对所有请求使用相同的 DatagramSocket 对象解决了这个问题。