Java UDP套接字客户端没有阻塞

时间:2012-06-14 15:37:29

标签: java sockets blocking broadcast

我正在尝试编写UDP客户端以接收来自在本地网络上广播的服务器的数据包。问题是receive方法没有阻塞并等待数据包到达。 相反,它接收空或空数据包。 我曾尝试使用.setSoTimeout(0),据说它会告诉接收阻塞,直到它收到一个数据包,但事实并非如此。

有谁知道如何解决这个问题?

以下是代码:

 while (search == true) {

                InetAddress addr = InetAddress.getByName("0.0.0.0");
                DatagramSocket sock = new DatagramSocket(1355);
                sock.setSoTimeout(0);
                byte[] recebe = new byte[1024];
                sock.setBroadcast(true);


                System.out.println("entrou1");
                DatagramPacket packet = new DatagramPacket(recebe, recebe.length);

                System.out.println("entrou2");
                sock.receive(packet);
                String info = new String(packet.getData());
                System.out.println("tamanho: " + info.length());

                if (info.trim().equals("") == false && info != null) {
                    System.out.println("entrou aqui");
                    System.out.println("info recebida:" + info + ":fsadfsfs");
                    String servs[] = info.split("\n");
                    list1.clear();
                    servidores.clear();

                    for (int i = 0; i < servs.length; i++) {
                        System.out.println("vec: " + servs[i]);
                        if (servs[i].trim().equals("")) {
                            System.out.println("break;");
                            break;
                        } else {
                            String aux = servs[i].substring(0, servs[i].lastIndexOf("->"));
                            System.out.println("aux: " + aux);
                            list1.add(aux);
                            servidores.add(servs[i]);
                        }
                    }
                }



                System.out.println("info:\n" + info);

                sock.close();

                synchronized (obj) {
                    try {
                        obj.wait();
                    } catch (InterruptedException ex) {
                        Logger.getLogger(AcederPartilhaGUI.class.getName()).log(Level.SEVERE, null, ex);
                    }
                }
            }

0 个答案:

没有答案