我正在开发一款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中的套接字和数据包?