Нужно ли переустанавливать сокет датаграммы при смене сети? - PullRequest
0 голосов
/ 08 июня 2018

Я работаю над приложением 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 при изменении сети?

...