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

时间:2018-06-08 10:26:45

标签: 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 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中的套接字和数据包?

0 个答案:

没有答案