ServerSocket: обработка отключения от клиента - PullRequest
0 голосов
/ 02 апреля 2019

Требование: Я пишу Java-приложение, в котором мне нужно, чтобы мое приложение выполняло роль сервера, прослушивающего определенный порт 'xxxx' для входящих соединений через TCP .После подключения к клиенту будет отправлен поток байтов от клиента, который будет обрабатываться моим приложением и соответствующим образом сохранять информацию в базе данных.До сих пор я смог реализовать эту функцию.

Сценарий для обработки: Мне нужно обработать один конкретный сценарий (который может быть редким, но все же).Соединение клиент-сервер может иногда прерываться из-за условий сети.В этом случае мне нужно, чтобы мое приложение ожидало восстановления соединения и возобновления чтения потока байтов с клиента.

Я относительно новичок в программировании сокетов на Java и ищу жизнеспособные решения.Мне пришло в голову два возможных решения (которые могут или не могут быть технически осуществимы):

  1. Настройка обратного вызова - я мог бы настроить обратный вызов так, чтобыметод readFromClient () инициируется, как только соединение (пере) установлено.Я не знаю, как это сделать.
  2. Добавление прослушивателя событий - Если подключение к клиенту считается событием, я мог бы зарегистрировать прослушиватель событийи вызвать метод readFromClient (), как только соединение будет (повторно) установлено.У меня есть основная идея, как это сделать, и я также пытаюсь это реализовать.Но был бы признателен, если бы кто-то мог придумать чистый подход.

Я не знаю, думаю ли я в правильном направлении.Но я думаю, что это могут быть возможные решения.Любая помощь будет оценена.

1 Ответ

0 голосов
/ 02 апреля 2019

... восстановить и возобновить чтение поток ...

Суть (в моем понимании):Там нет восстановления.Если соединение отсутствует (возникает исключение IOException), переустанавливать больше не нужно.

Используя TCP, вам не нужно (или меньше) заботиться о состоянии сети.

Если вы хотите знать,живо ли соединение, вы должны использовать пульс.

Если вы хотите переподключиться к клиенту, он должен предложить вам такую ​​возможность.

Возможно, я не понял, о чем вы говорите, но выможет опубликовать некоторый код и показать ситуацию с ошибкой (может быть, некоторые ошибки).

...