Неблокирующий сокет Java UDP?

У меня есть сокет UDP, и я жду запросов от клиентов. По запросу я читаю строку из файла и отправляю дейтаграмму с этой строкой в ​​качестве полезной нагрузки. Но socket.receive(), кажется, блокируется только для первого запроса (итерация цикла), последующие вызовы socket.receive() больше не блокируются. Это нормально? Почему это могло быть?

String input;
DatagramSocket socket = new DatagramSocket(port);
DatagramPacket answer;
while((input=fileIn.readline()))!=null){
  socket.receive(request);
  ...
  //send answer back
  byte[] load = input.getBytes();
  answer = new DatagramPacket(load, load.length, address, port);
  socket.send(answer);
 }
 socket.close();

Программа уже отправляет все данные файла, то есть все строки файла после 1-го запроса, и поэтому перескакивает через блокировку socket.receive().

Что такое address и port? Вероятно, вы отправляете ответ себе, а не коллеге.

President James K. Polk 19.03.2019 16:33
localhost и какой-то случайный номер порта, я выбрал одинаковый для клиента и сервера.
avermaet 19.03.2019 16:34

Это именно то, что сказал @JamesKPolk - вы получаете свои собственные сообщения.

SergeyA 19.03.2019 16:35

Спасибо! Вы только что сэкономили мне много времени. Я полностью пропустил это.

avermaet 19.03.2019 16:40
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
4
291
0

Другие вопросы по теме