Я предполагаю, что вы реализовали этот простой способ и сделали:
DatagramSocket s = new DatagramSocket( port );
DatagramPacket p = new DatagramPacket( new byte[256], 256);
s.receive( p );
Теперь, глядя на Javadoc, нет способа заставить DatagramSocket.receive()
выдать исключение InterruptedException. Закрытие сокета - единственный способ заставить его перестать слушать.
Лучшей реализацией этого было бы установить тайм-аут для DatagramSocket, используя DatagramSocket.setSoTimeout( int )
, равный чему-то небольшому, например, 2 секунды, а затем проверить, не прерывался ли ваш сервер. Таким образом, вы получите что-то подобное для своего серверного кода (не обрабатывает исключения):
DatagramSocket s = new DatagramSocket( port );
s.setSoTimeout( 2000 ); // 2 second time out
while( running ){ // boolean running flag, check for interrupt here
try{
DatagramPacket p = new DatagramPacket( new byte[256], 256);
s.receive( p );
//do stuff
} catch ( SocketTimeoutException e ){
//timed out
}
}//end while