EOFException - Проблемы с сервером / Клиентом readUTF

Недавно я заинтересовался попыткой адаптировать мою игру "Rock-Paper-Scissors" в многопользовательскую программу, поэтому сегодня я решил поискать учебник по серверам. Кажется, я точно следую за этим (кроме использования другой IDE). Тем не менее, что-то идет не так, и я не совсем уверен, что это такое, и он отлично работает для создателя учебника. Я посмотрел EOFException, но это не помогло мне.

Учебник на Youtube

Мой скриншот проблемы.Скриншот

[Документация по EOFException](у меня была ссылка здесь, но мне нужно как минимум 10 репутаций, чтобы опубликовать более двух ссылок)

"Сигнализирует о том, что конец файла или конец потока был неожиданно достигнут во время ввода. Это исключение в основном используется потоками ввода данных для сигнализации окончания потока. Обратите внимание, что многие другие операции ввода возвращают специальное значение в конце потока, а не бросают исключение."

[Подобный, но, по-видимому, нерешенный вопрос, заданный здесь] (у меня тоже была ссылка здесь]

Кстати, если вы посмотрите именно то, что я написал здесь, вы также обнаружите, что я спрашивал об этом на DaniWeb. Я просто публикую сообщения в нескольких местах на случай, если они не будут решены ни в одном, ни в другом месте. Если это так, то... чем больше знаний, тем лучше.

1 ответ

EOFException в течение readUTF() просто означает, что он достиг конца потока, как сказано на банке. Обратите внимание, что этот метод не возвращает null в конце потока, в отличие от readLine() (но как и все остальные readXXX() методы).

Это также может означать, что ваша отправка и получение не синхронизированы, например, вы пытаетесь прочитать какое-то смехотворно большое количество байтов, потому что вы пропустили readInt() или что-то подобное, или вы написали что-то дополнительное в одноранговом узле, которого у вас не должно быть, поэтому вы пытаетесь прочитать следующие байты в потоке в результате writeUTF() когда это не так. Это ошибка протокола приложения.

Как это произошло в опубликованном вами коде - это другой вопрос, но ваш код не закрывает сокеты, что не помогает. Добавить out.close() на код вашего сервера и in.close() к клиентскому коду. Однако я не могу воспроизвести вашу проблему с или без этих закрытий. Вы уверены, что это настоящий код?

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