Я реализую функцию обратного вызова между клиентами и сервером.Timer and DatagramSockets java
Клиент регистрируется на сервере, и когда происходит событие, сервер отправляет клиенту datagrampacket, чтобы сообщить клиенту о событии.
Клиент будет заблокирован в течение всего периода прослушивания, указанный пользователем
Когда он заблокирован, он войдет в эту петлю, чтобы продолжить прослушивание сервера для обратного вызова.
while (waiting) {
aSocket.setSoTimeout(0);
aSocket.receive(reply);
String replyString = new String(reply.getData()).trim();
System.out.println(replyString);
buffer = new byte[1000];
reply = new DatagramPacket(buffer, buffer.length);
}
Я закодировал таймер с TimerTask, который изменяет значение ожидания от истинного на ложное после того, как период прослушивания закончен.
Моя проблема заключается в том, что я хотел бы, чтобы клиент прекратил прослушивание после окончания периода прослушивания. Тем не менее, даже если я использую таймер, клиент будет заблокирован на
aSocket.receive(reply);
кто-нибудь здесь знает, как я могу пропустить ли этот код и выход из цикла?
спасибо.
Предполагалось, что если я установил тайм-аут, скажем 5000 мс, если сервер отправит сообщение на 5001 мс, клиент будет вызывать исключение тайм-аута вместо прослушивания сообщения. – Wilson
Да, вам нужно будет установить подходящий тайм-аут и обработать «TimeoutException» из-за характера блокировки 'receive()'. Если вы знакомы с java NIO, есть некоторые неблокирующие опции. –
Я попробую ваш метод. Не очень уверен в Java NIO. не думайте, что мой учитель хотел бы, чтобы мы пошли таким образом. – Wilson