Java 我是否需要在网络更改时重新启用数据报套接字?
我正在开发一个Android应用程序,它使用数据报套接字和数据包来接收和发送UDP数据包 接收在线程中完成: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
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中?您不需要比较步骤。只需将套接字连接到所需的源地址。我需要它,因为我在同一端口上接收来自不同源的包。那么为什么您只进行一个源地址比较?我可以接收我自己的广播[:因此我需要它们来清除它们。