Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.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 我是否需要在网络更改时重新启用数据报套接字?_Java_Android_Sockets_Udp_Package - Fatal编程技术网

Java 我是否需要在网络更改时重新启用数据报套接字?

Java 我是否需要在网络更改时重新启用数据报套接字?,java,android,sockets,udp,package,Java,Android,Sockets,Udp,Package,我正在开发一个Android应用程序,它使用数据报套接字和数据包来接收和发送UDP数据包 接收在线程中完成: public UnitedReceiver(int port) { try { message = new UnitedMessage(); packet = new DatagramPacket(message.data, message.data.length); socket = new Dat

我正在开发一个Android应用程序,它使用数据报套接字和数据包来接收和发送UDP数据包

接收在线程中完成:

public UnitedReceiver(int port) {
        try {
            message = new UnitedMessage();
            packet = new DatagramPacket(message.data, message.data.length);
            socket = new DatagramSocket(port);
        } catch (SocketException e) {
            e.printStackTrace();
        }
    }

    public void run(){
        isRunning = true;

        while(isRunning){
            try {
                socket.receive(packet);

                if(!Network.compare(packet.getAddress(), Params.local_ip)){

                    //namesti kodove i length
                    message.data_length = packet.getLength();
                    new UnitedParser(message, packet.getAddress());
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        socket.close();
    }
使用静态功能完成发送:

public static void send(InetAddress adr, int port, byte[] data, int length) throws Exception{
        DatagramPacket packet;
        DatagramSocket socket = null;

        try{
            packet = new DatagramPacket(data, length, adr, port);
            socket = new DatagramSocket();
            socket.setSoTimeout(timeout);

            socket.send(packet);

            socket.close();
        }
        catch(Exception e){
            socket.close();
            throw e;
        }
    }
我感兴趣的是当网络发生变化时会发生什么,以及通过扩展设备的ip地址。 发送不应该是问题,它总是创建新的套接字和数据包

但是UnitedReceiver是在一个无限循环中,所以可能有?
是否必须在网络更改时将套接字和数据包重新绑定到UnitedReceiver中?

您不需要比较步骤。只需将套接字连接到所需的源地址。我需要它,因为我在同一端口上接收来自不同源的包。那么为什么您只进行一个源地址比较?我可以接收我自己的广播[:因此我需要它们来清除它们。