я новый поток как этотКак закрыть приемное гнездо UDP через некоторое время?
new Thread(new Runnable() {
@Override
public void run() {
DatagramSocket udpSocket = null;
try {
udpSocket = new DatagramSocket(null);
udpSocket.setReuseAddress(true);
udpSocket.setBroadcast(true);
udpSocket.bind(new InetSocketAddress(BIND_PORT));
InetAddress ipAddress = InetAddress.getByName(BROADCAST);
DatagramPacket udpSendPacket = new DatagramPacket(sendMessage, sendMessage.length, ipAddress, SEND_PORT);
// udp send
udpSocket.send(udpSendPacket);
// udp receive
byte[] receiveMessage = new byte[100];
DatagramPacket udpReceivePacket = new DatagramPacket(receiveMessage, receiveMessage.length);
long startTime = System.currentTimeMillis();
while ((System.currentTimeMillis()-startTime) < 5000) {
udpSocket.receive(udpReceivePacket);
Log.v(TAG, new String(receiveMessage, 0, udpReceivePacket.getLength()));
}
udpSocket.close();
Log.v(TAG, "udp: close");
} catch (Exception e) {
Log.e(TAG, e.toString());
e.printStackTrace();
} finally {
if (udpSocket != null) {
udpSocket.close();
Log.v(TAG, "udp: close");
}
}
}
}).start();
Я хочу, чтобы получить список возвращенного сообщения, но, кажется, это старается не идти в конце концов, и этот сокет никогда не закрывается. Это может вызвать некоторые проблемы в следующий раз, когда я хочу привязать этот порт. Как я могу убедиться, что этот порт закрыт через некоторое время.
Почему вы ожидаете выхода цикла while? –
Я знаю, что этого не произойдет, поэтому мне нужен какой-то метод, чтобы он вышел. Я пробовал long startTime = System.currentTimeMillis(); while (true && (System.currentTimeMillis() - startTime) <5000) { }, но не работает. –
Да, вы могли бы использовать что-то подобное. Почему это не работает для вас? –