Bazaprogram.ru

Новости из мира ПК
6 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Java net socketexception

Что вызывает мое java. net. SocketException: сброс соединения?

мы видим часто java.net.SocketException: Connection reset ошибки в наших журналах для компонента, который вызывает стороннюю веб-службу, которая отправляет SMS-сообщения.

наше приложение написано на Java и работает на базе Tomcat 5.5. Его написали подрядчики, которых у нас больше нет. Текущая команда не имеет реального опыта Java, и мы не уверены, где Connection reset ошибка на самом деле и откуда, и как идти об отладке.

проблема кажется полностью прерывистой, и не связаны с сообщениями, которые мы пытаемся отправить.

любые предложения о том, что типичные причины этого исключения могут быть, и как мы могли бы продолжить, приветствуются.

весь стек вызовов включен ниже для полноты.

( com.companyname.mtix.sms это наша составляющая)

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

13 ответов:

javadoc для SocketException утверждает, что это

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

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

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

Как вы используете Commons HTTP Client посмотрите на общее руководство по ведению журнала HTTP-клиента. Это расскажет вам, как зарегистрировать запрос на уровне HTTP.

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

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

при попытке доступа к веб-службам, развернутым на сервере Glassfish3, может потребоваться настроить параметры пула http-потоков. Это фиксированные SocketExceptions у нас было, когда многие параллельные потоки вызывали веб-службу.

  1. перейти в консоль администратора
  2. перейдите к «конфигурации»->»конфигурация сервера»->»пулы потоков»->»http-thread-pool».
  3. изменить параметр «максимальный размер пула потоков» с 5 до 32
  4. изменить параметр «мин Размер пула потоков» от 2 до 16
  5. Перезапустить Glassfish.

в моем случае это было потому, что мой кот был установлен с недостаточным maxHttpHeaderSize для особо сложного запроса SOLR.

надеюсь, что это поможет кому-то там!

Я тоже наткнулся на эту ошибку. В моем случае проблема была в том, что я использовал JRE6, с поддержкой TLS1.0. Сервер поддерживал только TLS1.2, поэтому эта ошибка была выдана.

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

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

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

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

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

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

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

Читать еще:  Java создание функции

Я знаю, что этот поток немного стар, но хотел бы добавить мои 2 цента. У нас была такая же ошибка «сброса соединения» сразу после нашего одного из выпусков.

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

Это старый поток, но я столкнулся с java.net.SocketException: Connection reset вчера.

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

Я тоже получал именно эту ошибку: Connection reset by peer . Исключение был поднят по шаблону остальных источников при выполнении postForObject() метод. Для меня проблемой был слишком длинный HTTP URL запрос. Поэтому сначала проверьте, является ли созданный URL-адрес тем, что он должен быть, и если ваш сервер действительно должен иметь возможность обрабатывать запросы такой длины, просто перейдите к конфигурации сервера и поднимите допустимую длину URL-запросов по умолчанию.

это решило проблему для меня, но помните: приложение может не работать в некоторых интернет-браузерах, особенно старых, так как они имеют фиксированную максимальную длину URL-запросов.

надеюсь, что это помогает.

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

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

найти заблокированные идентификаторы сеанса:

это должно дать вам подсказки о том, что таблица заблокирована, но еще не завершает изменения.

Java.net.ConnectException: Connection timed out: no further information — Решение

При попытке подключения к серверу «Майнкрафт» пользователь может столкнуться с сообщением «Java.net.ConnectException: Connection timed out: no further information». Появление данного сообщения обычно сигнализирует о возникновении различного рода сетевых проблем при получении доступа к игровому серверу, из-за чего желание пользователя насладиться игровыми мирами «Майнкрафт» остаётся нереализованным. Ниже я разберу суть данной дисфункции, опишу её причины, а также поясню, как исправить ошибку Java.net.ConnEctexception на вашем ПК.

Месседж о возникшей ошибке

Connection timed out: no further information – особенности дисфункции

В переводе текст данного сообщения звучит примерно как «Сетевой сбой Java. Время соединения истекло: дальнейшая информация отсутствует».

Указанная ошибка Java.net.ConnectException обычно возникает во время подключения к серверу игры «Майнкрафт», но также фиксировались спорадические случаи появления данной ошибки при работе других продуктов, использующих «Java» (к примеру, на «Azure notification hub»).

Появление проблемы «Java.net.ConnectException: Connection timed out: no further information» имеет следующие причины:

  • Пользователь использует нестабильное сетевое соединение с медленным интернетом;
  • На ПК пользователя установлена устаревшая версия «Java»;
  • Пользователь пользуется устаревшей версией «Майнкрафт»;
  • Наблюдаются сбои в работе игрового сервера, к которому пробует подключиться пользователь (ресурс не доступен, проходят технические работы и др.);
  • Антивирус или брандмауэр блокирует подключения к игровому серверу;
  • Пользователь использует динамический IP;
  • Пользовательский роутер работает некорректно.

Как исправить «Java.net.ConnectException: Connection timed out»

Существуют несколько способов избавиться от ошибки Java.net.ConnectException. Рассмотрим их по порядку:

  • Перезагрузите ваш PC. В некоторых случаях данный простой метод позволял решить ошибку java.net.connectexception connection refused;
  • Установите на ПК свежую версию «Java». Довольно частой причиной рассматриваемой проблемы является устаревшая версия «Java» на пользовательском ПК. Перейдите в Панель управления, затем в «Программы», там найдите «Java» и кликните на неё. После появления окна её настроек перейдите на вкладку «Update», нажмите там на кнопку «Update Now», и установите в системе требуемые обновления.

Данную процедуру необходимо провести как на вашей машине, так и на машине того пользователя, с которым вы собираетесь играть в «Майнкрафт» по сети;

Обновите вашу версию «Ява»

    Внесите «Майнкрафт» в исключения брандмауэра и антивируса на вашем ПК. Запустите Панель управления, перейдите в «Система и безопасность», там найдите «Брандмауэр Виндовс» и кликните на него. В открывшемся окне настроек брандмауэра слева сверху выберите опцию «Разрешения взаимодействия…». Выберите данную опцию

В открывшемся окне разрешённых для внешнего подключения программ найдите программы с упоминанием «Java», и поставьте им галочки для разрешения подключения (поможет кнопка «Изменить параметры»). Нажимаем на «Ок» для сохранения результата, перезагружаемся и пробуем подключиться к серверу. С антивирусом необходимо проделать аналогичные операции, внеся «Java» и «Майнкрафт» в его исключения;

Читать еще:  Ошибка при запуске 0xc000022
  • Попробуйте альтернативный сервер. Если подключения к конкретному серверу невозможно, тогда вполне вероятно, что у него наблюдаются временные проблемы в работе. Рекомендую попробовать альтернативный сервер, или подождать некоторое время, пока работоспособность начального сервера восстановиться;
  • Создайте сервер на другой машине. Если вы создаёте сервер, к которому подключается другой знакомый вам пользователь, тогда рекомендуется поменять базовый компьютер для создания сервера. То есть сервер должен создать уже другой пользователь, а вы подключитесь к нему. Часто это позволяло решить проблему net.ConnectException на пользовательском компьютере;
  • Используйте статистический IP-адрес. Если у вас есть возможность, рекомендуется использовать официальный (белый) IP-адрес, полученный через провайдера (обычно данная услуга имеет платный характер);
  • Установите на ваш ПК (гаджет) свежую версию «Майнкрафт». Обычно необходимо, чтобы версии игры на сервере и на вашем ПК (гаджете) соответствовали друг другу;

    Установите самую свежую версию программы

  • Избавьтесь от имеющихся модов к игре. Если вы используете какие-либо моды «Майнкрафт», рекомендуется удалить их, оставив само тело игры;
  • Перезагрузите ваш роутер. Отключите ваш роутер, подождите полминуты, а затем включите его обратно;
  • Обратитесь за консультацией к провайдеру. По различным причинам некоторые провайдеры блокируют доступ к некоторым серверам. Узнайте, не ваш ли это случай, и не является ли ваш провайдер причиной возникновения данной проблемы.
  • java.net.SocketException – How to solve SocketException

    Posted by: Nikos Maravitsas in SocketException June 13th, 2014 0 Views

    In this example we are going to talk about java.net.SocketException . This is a subclass of IOException so it’s a checked exception. It is the most general exception that signals a problem when trying to open or access a socket.

    As you might already know, it’s strongly advised to use the most “specific” socket exception class that designates the problem more accurately. It is also worth noting that SocketException , usually comes with an error message that is very informative about the situation that caused the exception.

    1. A simple Client-Server Application

    To demonstrate this exception, I’m going to borrow some code from the client-server application we’ve seen in java.net.ConnectException – How to solve Connect Exception. It consists of two threads. The first one, SimpleServer , opens a socket on the local machine on port 3333 . Then it waits for a connection to come in. When it finally receives a connection, it creates an input stream out of it, and simply reads one line of text from the client that was connected. The second thread, SimpleClient , attempts to connect to the server socket that SimpleServer opened. When it does so, it sends a line of text and that’s it. This time though the two threads will be in different classes launched by two different main methods, so as to cause a SocketEception :

    As you can see, I’ve put a 15 second delay in SimpleClient for the client to wait before attempting to its message. It is important to notice that by the time the client calls sleep() , he has already created the connection to the server. What I’m going to do is start both threads and after the client makes the connection I will suddenly stop the client application.

    Here’s what happens on the server side:

    As you can see we get a SocketException with the message Connection reset . This happens when on of the participants “violently” closes the connection without using close() . Of course you can provoke a “violent” close of the connection without having to close the application manually. In the client code, after waiting for 15 seconds (or less), you can throw a new exception (using throws new Exception() ), but you have to remove the finally clause or else then the connection will close normally and no SocketException will be thrown.

    2. How to solve SocketException

    As we’ve already mentioned, SocketException is a general exception the designates a problem when trying to access or open a Socket . So as you can imagine, solving that problem has to be done with extra care. You shall always log the error message that accompanies the exception. In the previous example we’ve seen the message code>Connection reset . This happens when on of the participants “violently” closes the connection without using close() . This means that you should check whether one of the participants has terminated unexpectedly. One slightly bizarre message can be Too many open files , especially when you run on Linux. This message designates that to many file descriptors are open to the system. You can avoid that error if you go to /etc/sysctl.conf and raise the number in fs.file-max field. Additionally, you can try to give more stack memory.

    Читать еще:  Java lang exceptionininitializererror

    Of course many other messages can be met. For example «Bind error» , where your connection cannot be established because the port cannot be bind to the socket. In that case check if the port is already in use etc.

    In the next few example we are going to look deeper into the subclass of SocketException to get a better understanding of it.

    Ошибка java.net.SocketException: Conection reset — как исправить

    В этом примере мы поговорим о java.net.SocketException. Это подкласс IOException, поэтому это проверенное исключение, которое сигнализирует о проблеме при попытке открыть или получить доступ к сокету.

    Настоятельно рекомендуется использовать самый «определенный» класс исключений сокетов, который более точно определяет проблему. Стоит также отметить, что SocketException, выдаётся на экран с сообщением об ошибке, которое очень информативно описывает ситуацию, вызвавшую исключение.

    Простое клиент-серверное приложение

    Чтобы продемонстрировать это исключение, я собираюсь позаимствовать некоторый код из клиент-серверного приложения, которое есть в java.net.ConnectException. Он состоит из 2 потоков.

    • Поток 1 — SimpleServer, открывает сокет на локальном компьютере через порт 3333. Потом он ожидает установления соединения. Если происходит соединение, он создает входной поток и считывает 1 текстовую строчку, от клиента, который был подключен.
    • Поток номер 2 — SimpleClient, подключается к сокету сервера, открытого SimpleServer. Он отправляет одну текстовую строчку.

    Получается, что 2 потока будут в разных классах, запущенных двумя разными основными методами, чтобы вызвать исключение:

    Как вы можете видеть, я поместил в SimpleClient 15-секундную задержку, прежде чем попытаться отправить свое сообщение. К тому моменту, когда клиент вызывает sleep(), он уже создал соединение с сервером. Я собираюсь запустить оба потока, и после того, как клиент установит соединение, я внезапно остановлю клиентское приложение.
    Вот что происходит на стороне сервера:

    Мы получаем исключение SocketException с сообщением «Сброс подключения». Это происходит, когда один из участников принудительно закрывает соединение без использования close().

    Конечно, вы можете сделать оперативное закрытие соединения, не закрывая приложение вручную. В коде клиента, после ожидания в течение 15 секунд (или меньше), вы можете выдать новое исключение (используя throws new Exception ()), но вы должны удалить finally, иначе соединение будет нормально закрываться, и SocketException не будет сброшен.

    Как решить проблему с SocketException

    SocketException — это общее исключение, обозначающее проблему при попытке доступа или открытия Socket. Решение этой проблемы должно быть сделано с особой тщательностью. Вы должны всегда регистрировать сообщение об ошибке, которое сопровождает исключение.

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

    Также может быть сообщение «Слишком много открытых файлов», особенно если вы работаете в Linux. Это сообщение обозначает, что многие файловые дескрипторы открыты для системы. Вы можете избежать этой ошибки, если перейдете в /etc/sysctl.conf и увеличите число в поле fs.file-max. Или попытаться выделить больше стековой памяти.

    Конечно, можно встретить много других сообщений. Например, «Ошибка привязки», где ваше соединение не может быть установлено, поскольку порт не может быть привязан к сокету. В этом случае проверьте, используется ли порт и т. д.
    Если у вас проблема с minecraft, то в видео ниже очень просто объясняется как это решить.

    Ссылка на основную публикацию
    Adblock
    detector