Java-сокет получает неотправленные байты - PullRequest
0 голосов
/ 22 февраля 2012

У меня есть приложение «сервер-клиент», и я столкнулся со странным скачком скорости с «кодами ошибок входа в систему».

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

Есть ли способ, кроме использования setSoLinger() (и т. Д.), чтобы проверить, что последний записанный байт (или больше) был прочитан клиентом?

Спасибо.

1 Ответ

1 голос
/ 22 февраля 2012

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

Нет другого надежного способа убедиться, что другая конечная точка получила какие-то данные: нет .close(), нет .flush(), ничто не будет гарантировать прием другой конечной точкой.

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