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