Сброс InputStream Java-сокета после достижения EOS - PullRequest
1 голос
/ 22 марта 2010

Я пытаюсь соединить два отдельных приложения через сокет TCP / IP. В этом случае ни одно из приложений не работает как «клиент» другого, было бы проще описать их как два отдельных сервера, которые должны взаимодействовать друг с другом.

Для получения данных я использую функцию InputStream.Read(), и как только она получает значение -1, она должна прекратить обработку. Однако теперь проблема заключается в том, что, если другой набор данных встречается, InputStream уже находится в конце потока (EOS), и поэтому все новые отправляемые данные отбрасываются или игнорируются. Единственный способ, который я нашел, чтобы решить эту проблему, состоит в том, что, как только достигнут конец потока, я закрываю сокет и снова открываю его, который, я думаю, может быть обработан лучше другим способом.

Как я могу сбросить InputStream, чтобы он был готов к следующему набору данных, которые могут прийти?

1 Ответ

4 голосов
/ 22 марта 2010

Вы получаете EOS при чтении из сокета TCP / IP, потому что другой конец закрыл сторону записи своего сокета.Как только это происходит, протокол TCP / IP не дает возможности «разомкнуть» соединение.

Если вы не хотите открывать новое соединение, вам нужен протокол приложения поверх TCP /Транспортный протокол IP, который позволяет указывать конец каждого логического набора данных ... без выполнения закрытия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...