Java void sendUrgentData () создает исключение SocketException - PullRequest
2 голосов
/ 28 апреля 2011

Я пытаюсь использовать sendUrgentData () void, чтобы определить, живо ли еще соединение.Данные, отправленные через этот пробел, будут игнорироваться на стороне сервера, но когда соединение теряется, sendUrgentData генерирует исключение SocketException на стороне клиента.

Так и должно быть.Тем не менее, после вызова sendUrgentData несколько раз кажется, что он отключается и выдает исключение SocketException, когда соединение все еще полностью живо:

java.net.SocketException: Connection reset by peer: send

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

Ответы [ 2 ]

1 голос
/ 29 апреля 2011

Отправленные данные не будут проигнорированы, они будут прочитаны встроенным сервером, если они написаны на Java.Таким образом, вы, вероятно, вызываете ошибку протокола.Сброс соединения одноранговым узлом означает, что вы записали соединение, которое уже было закрыто одноранговым узлом ... возможно, в ответ на ошибку протокола.

0 голосов
/ 28 апреля 2011

Socket#sendUrgentData() выдаст SocketException, если базовая реализация не поддерживает отправку срочных данных. Из памяти описание сообщения об исключении сокета в Java 1.6 выглядит как «срочные данные не поддерживаются».

  • На какой платформе вы работаете (Windows, Linux и т. Д.)?

  • Какую версию Java вы используете?

...