Что вызывает мое java.net.SocketException: сброс соединения? [Дубликат]

Определите тип с помощью typing.NewType и наследуйте от него:

from typing import NewType

AnimalType = NewType('AnimalType', object)

class Animal:
    def __init__(self, name: str):
        self.name = name

    def say_hello(self, animal: AnimalType):
        print(f"Hi {animal.name}")
136
задан Raedwald 24 January 2019 в 12:39
поделиться

5 ответов

javadoc для SocketException указывает, что это

Брошенный, чтобы указать, что существует ошибка в базовом протоколе, таком как ошибка TCP

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

Помочь отладке Вас могло посмотреть на использование инструмента, такого как Wireshark для просмотра пакетов фактической сети. Кроме того, есть ли альтернативный клиент к Вашему коду Java, который Вы могли использовать для тестирования веб-сервиса? Если бы это было успешно, то это могло бы указать на ошибку в коде Java.

Поскольку Вы используете палату общин, Клиент HTTP взглянул на Общий Клиент HTTP, Регистрирующий Руководство. Это скажет Вам, как зарегистрировать запрос на уровне HTTP.

63
ответ дан 23 November 2019 в 23:41
поделиться

Эта ошибка происходит на стороне сервера, когда клиент закрыл сокетное соединение, прежде чем ответ мог быть возвращен по сокету. В сценарии веб-приложения не все они опасны, так как они могут быть созданы вручную. Например, путем выхода из браузера, прежде чем reponse был получен.

4
ответ дан 23 November 2019 в 23:41
поделиться

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

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

3
ответ дан 23 November 2019 в 23:41
поделиться

Эта ошибка возникает на вашей стороне , а НЕ на другой стороне. Если другая сторона сбросит соединение, в сообщении об исключении должно быть сказано:

java.net.SocketException reset by peer

Причина в том, что соединение внутри HttpClient устарело. Проверка устаревшего соединения для SSL не устраняет эту ошибку. Решение: дамп своего клиента и воссоздание.

40
ответ дан 23 November 2019 в 23:41
поделиться

Я получаю эту ошибку постоянно и считаю ее нормальным явлением.

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

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

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

5
ответ дан 23 November 2019 в 23:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: