Я использую Java / TCP / IP-сервер, используя ServerSocket
для приема сообщений от клиентов через сетевые сокеты.
Работает нормально, за исключением клиентов на КПК (сканер штрих-кода WIFI).
Если у меня есть соединение между сервером и кпк - и кпк через некоторое время простаивает (в режиме ожидания) - тогда будут проблемы с соединением.
Когда кпк снова просыпается, я могу наблюдать на мониторе tcp, что второе соединение с другим портом установлено, но старый также остается установленным:
localhost: 2000 remotehost: 4899 ESTABLISHED (первое соединение)
localhost: 2000 remotehost: 4890 ESTABLISHED (соединение после пробуждения)
И теперь связь не работает, так как клиент теперь использует новое соединение, но сервер все еще слушает старое, поэтому сервер не получает сообщения. Но когда сервер отправляет сообщение клиенту, он осознает проблему (получает SocketException
: сброс соединения. Затем сервер использует новое соединение, и все сообщения, которые были тем временем отправлены клиентом, будут получены на один удар!
Итак, я сначала осознаю проблемы с сетью, когда сервер пытается отправить сообщение - но в то же время нет никаких исключений или чего-либо еще. Как правильно отреагировать на эту проблему - чтобы новое соединение использовалось, как только оно установлено (а старое закрыто)?