Он не совсем блокируется на receive()
, он блокирует на receive()
.В частности, он будет ждать на приемной линии, пока что-то не появится.В целях отладки и тестирования вы можете использовать что-то вроде:
socket.setSoTimeout(5000); // Block for max 5 seconds
while (true) {
try {
s.receive(packet);
System.out.println("Succeded!");
break;
} catch (SocketTimeoutException ste) {
// Timeout reached, log this and try again.
// Possibly keep track of the total number of tries and give up
// (break) if it exceeds a threshold.
System.out.println("Timeout reached, will try again");
} catch (IOException iox) {
System.out.println("I/O Error: " + iox.getMessage());
break;
}
}
Как правило, неплохо использовать тайм-аут в сокетах, это предотвращает бесконечное ожидание вашего приложения.Будет ли это иметь смысл для вас, конечно, зависит от вашего варианта использования.