- Ошибка java.net.SocketException: Conection reset – как исправить
- Простое клиент-серверное приложение
- Как решить проблему с SocketException
- java.net.SocketException: сброс подключения
- How to Fix with java.net.SocketException: Connection reset Exception in Java? Examples
- How to solve java.net.SocketException: Connection reset Exception in Java
- Что вызывает мое java. net. SocketException: сброс соединения?
- 13 ответов:
Ошибка 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, то чтобы решить проблему попробуйте сделать следующее:
- Обновите джаву, скачайте по ссылке https://www.java.com/ru/download/ новую версию и установите;
- Возможно блокирует антивирус или брандмауэр. Отключите антивирус и добавьте minecraft в список исключения в брандмауэре (или его можно выключить на время).
- При запуске игры, в правом нижнем углу отображается версия игры, если у вас не последняя версия, то обновите.
- Если у вас много расширений и модов, то это может приводить к багам, удалите последние установленные моды – это может решить проблему.
- Если вы используете платный сервер и у вас закончилась подписка, то опять же у вас будет такая ошибка.
Средняя оценка / 5. Количество голосов:
Спасибо, помогите другим — напишите комментарий, добавьте информации к статье.
Источник
java.net.SocketException: сброс подключения
Я получаю следующую ошибку при чтении из сокета. Я делаю readInt() на этом InputStream , и я получаю эту ошибку. Изучая документацию, можно предположить, что клиентская часть соединения закрыла соединение. В этом сценарии я являюсь сервером.
У меня есть доступ к файлам журнала клиента, и он не закрывает соединение, и на самом деле его файлы журнала предполагают, что я закрываю соединение. Кто-нибудь знает, почему это происходит? Что еще проверить? Возникает ли это, когда есть местные ресурсы, которые, возможно, достигают пороговых значений?
Замечу, что у меня есть такая строка:
непосредственно перед readInt() . Для этого есть причина (длинная история), но просто любопытно, есть ли обстоятельства, при которых это могло бы привести к указанной ошибке? У меня есть сервер, работающий в моей IDE, и я случайно оставил свою IDE застрявшей в точке останова, и затем я заметил, что те же самые ошибки начали появляться в моих собственных журналах в моей IDE.
В любом случае, просто упоминание об этом, надеюсь, не отвлекающий маневр. 🙁
Есть несколько возможных причин.
Другой конец намеренно сбросил соединение, что я здесь не буду описывать. Прикладное программное обеспечение делает это редко и, как правило, неправильно, но для коммерческого программного обеспечения это известно.
Чаще всего это вызвано записью в соединение, которое другой конец уже нормально закрыл. Другими словами, ошибка протокола приложения.
Это также может быть вызвано закрытием сокета, когда в приемном буфере сокета есть непрочитанные данные.
В Windows «программное обеспечение вызвало прерывание соединения», что не то же самое, что «сброс соединения», вызвано сетевыми проблемами при отправке с вашего конца. Об этом есть статья в базе знаний Microsoft.
Сброс соединения означает просто получение TCP RST. Это происходит, когда ваш партнер получает данные, которые он не может обработать, и для этого могут быть разные причины.
Самый простой — это когда вы закрываете сокет, а затем записываете больше данных в выходной поток. Закрывая сокет, вы сказали своему партнеру, что вы закончили говорить, и он может забыть о вашем соединении. Когда вы все равно отправляете в этот поток больше данных, одноранговый узел отклоняет их с помощью RST, чтобы вы знали, что он не слушает.
В других случаях вмешивающийся межсетевой экран или даже сам удаленный хост могут «забыть» о вашем TCP-соединении. Это может произойти, если вы не отправляете никаких данных в течение длительного времени (2 часа — обычный тайм-аут) или из-за того, что одноранговый узел был перезагружен и потерял информацию об активных соединениях. Отправка данных по одному из этих несуществующих соединений также вызовет RST.
Обновление в ответ на дополнительную информацию:
Внимательно посмотрите на то, как вы работаете с SocketTimeoutException . Это исключение возникает, если превышен настроенный тайм-аут при блокировании операции сокета. Состояние самого сокета не изменяется при возникновении этого исключения, но если ваш обработчик исключений закрывает сокет, а затем пытается записать в него, вы будете в состоянии сброса соединения. setSoTimeout() предназначен для того, чтобы дать вам чистый способ прервать read() операцию, которая в противном случае могла бы заблокироваться навсегда, без каких-либо грязных вещей, таких как закрытие сокета из другого потока.
Источник
How to Fix with java.net.SocketException: Connection reset Exception in Java? Examples
Hello guys, for the past few months, I have been writing about different socket-related errors on Java applications, and today I am going to talk about another common socket-related exception in Java — java.net.SocketException: Connection reset Exception. There is no difference between exceptions thrown by the client and server. This is also very similar to the java.net.SocketException: Failed to read from SocketChannel: Connection reset by a peer but there is some subtle difference. The difference between connection reset and connection reset by peer is that the first means that your side reset the connection, the second means the peer did it. Nothing to do with clients and servers whatsoever
The java.net.SocketException: Connection reset error usually comes when one of the parties in TCP connection like client or server is trying to read/write data, but other parties abruptly close the connection like it was crashed, stopped, or terminated.
You will also not receive this error if the Client closes the connection using the close() method before sever sends the response. This occurred when Server closed the connection, while the client is still waiting to read data from its InputStream.
For example, if you are using BufferedReader for writing data then it will block if you don’t write \n or line terminator on the message.
Similarly, on the server side you will see the following error :
This occurs when the Server is reading data and blocked on a read() call but the client was terminated, this time you saw the message on the server-side. As you can see we get a SocketException with the message Connection reset. This happens when one of the parties closes the connection without using the close() method.
Btw, this is my fourth article in the series on how to deal with Socket related exceptions in Java. If you haven’t read the other articles of this series, here are them
- How to fix java.net.SocketException: Software caused connection abort: recv failed
- How to fix java.net.SocketException: Failed to read from SocketChannel: Connection reset by peer
- Overview of 7 common Socket Exception in Java applications
- How to deal with java.net.SocketException: Broken pipe exception
If you struggle to solve socket-related exceptions in client-server Java applications then you can go through those articles to learn more about how to deal with these exceptions.
How to solve java.net.SocketException: Connection reset Exception in Java
If you are a client and getting this error while connecting to the server-side application then you can do the following things:
1. First, check if the Server is running by doing telnet on the host port on which the server runs.
In most cases, you will find that either server is not running or restarted manually or automatically.
2. Check if the server was restarted
3. Check if the server failed over to a different host
4. log the error
5. Report the problem to the server team
Though, as a Java programmer, you should have good knowledge of Socket API, both old and new and if you need the recommendation to level up your skill, I suggest you join a comprehensive Java course like The Complete Java Programming MasterClass course by Tim Buchalaka on Udemy. It’s not only the most comprehensive course but also the most up-to-date and covers news features from recent Java releases.
That’s all about how to deal with the java.net.SocketException: Connection reset Exception in Java. As I told you it doesn’t matter whether this error is coming on server-side Java application or client-side Java application then underlying cause is always that the other party terminated the connection or the connection is lost due to network issues. You also cannot rule out the possibility of that host is restarted or the server-side application crashed.
Other Java troubleshooting articles you may like:
- java.sql.SQLException: No suitable driver found for ‘jdbc:mysql://localhost:3306/mysql [Solution]
- How to solve java.lang.ClassNotFoundException: com.mysql.jdbc. Driver error? (hint)
- java.sql.SQLServerException: The index 58 is out of range — JDBC (solution)
- How to fix Caused By: java.lang.NoClassDefFoundError: org/apache/log4j/Logger (solution)
- org.Springframework.Web.Context.ContextLoaderListener (solution)
- How to connect to MySQL database in Java? (tutorial)
- Fixing java.lang.UnsupportedClassVersionError Unsupported major.minor version 50.0 (solution)
- How to fix ‘javac’ is not recognized as an internal or external command (solution)
- java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory error (solution)
- Common reasons of java.lang.ArrayIndexOutOfBoundsException in Java? (solution)
- java.lang.ClassNotFoundException :
- How to avoid ConcurrentModificationException in Java? (tutorial)
- How to solve the «could not create the Java virtual machine» error in Java? (solution)
- 10 common reasons for java.lang.NumberFormatException in Java? (tutorial)
- How to fix the «illegal start of expression» compile-time error in Java? (tutorial)
- Cause and solution of «class, interface, or enum expected» compiler error in Java? (fix)
- How to solve java.lang.OutOfMemoryError: Java Heap Space in Eclipse, Tomcat? (solution)
- How to fix «Error: Could not find or load main class» in Eclipse? (guide)
- How to solve java.lang.classnotfoundexception oracle.jdbc.driver.oracledriver? (solution)
- How to solve «variable might not have initialized» compile-time error in Java? (answer)
Thanks for reading this article, if you like this article then please share it with your friends and colleagues too. If you have any doubt or questions then please drop a comment.
P. S. — It’s worth noting that both Socket and Network Programming is advanced skill and worth learning. If you want to learn more about Socket Programming in Java, I suggest you check the Java: Socket Programming Simplified, a free course on Udemy.
Источник
Что вызывает мое 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 у нас было, когда многие параллельные потоки вызывали веб-службу.
- перейти в консоль администратора
- перейдите к «конфигурации»->»конфигурация сервера»->»пулы потоков»->»http-thread-pool».
- изменить параметр «максимальный размер пула потоков» с 5 до 32
- изменить параметр «мин Размер пула потоков» от 2 до 16
- Перезапустить Glassfish.
в моем случае это было потому, что мой кот был установлен с недостаточным maxHttpHeaderSize для особо сложного запроса SOLR.
надеюсь, что это поможет кому-то там!
Я тоже наткнулся на эту ошибку. В моем случае проблема была в том, что я использовал JRE6, с поддержкой TLS1.0. Сервер поддерживал только TLS1.2, поэтому эта ошибка была выдана.
Я получаю эту ошибку все время и считают это нормальным.
Это происходит, когда одна сторона пытается читать, когда другая сторона уже повесил трубку. Таким образом в зависимости от протокола это может или не может обозначить проблему. Если мой клиентский код специально указывает серверу, что он собирается повесить трубку, то клиент и сервер могут повесить трубку одновременно, и это сообщение не произойдет.
способ реализации моего кода для клиента просто повесьте трубку, не попрощавшись. Затем сервер может поймать ошибку и игнорировать ее. В контексте HTTP я считаю, что один уровень протокола позволяет более одного запроса на соединение, а другой-нет.
таким образом, вы можете видеть, как потенциально одна сторона может продолжать висеть на другой. Я сомневаюсь, что ошибка, которую вы получаете, имеет какое-либо пиратское отношение, и вы можете просто поймать ее, чтобы она не заполняла ваши файлы журнала.
исключение означает, что сокет был неожиданно закрыт с другой стороны. Поскольку вы вызываете веб-службу, этого не должно произойти — скорее всего, вы отправляете запрос, который вызывает ошибку в веб-службе.
попробуйте записать весь запрос в этих случаях, и посмотреть, если вы заметили что-нибудь необычное. В противном случае свяжитесь с поставщиком веб-услуг и отправьте им свой зарегистрированный проблемный запрос.
эта ошибка возникает на стороне сервера, когда клиент закрыл соединение до того, ответ может быть возвращен через сокет. В сценарии веб-приложения не все из них опасны, так как они могут быть созданы вручную. Например, путем выхода из браузера до получения ответа.
Я знаю, что этот поток немного стар, но хотел бы добавить мои 2 цента. У нас была такая же ошибка «сброса соединения» сразу после нашего одного из выпусков.
первопричина была, наша apache сервер был сбит для развертывания. Весь наш сторонний трафик проходит через apache и мы получали ошибку сброса соединения из-за того, что он был вниз.
Это старый поток, но я столкнулся с java.net.SocketException: Connection reset вчера.
в серверном приложении были изменены настройки регулирования, чтобы разрешить только 1 соединение за раз! Таким образом, иногда звонки проходили, а иногда нет. Я решил проблему, изменив настройки регулирования.
Я тоже получал именно эту ошибку: Connection reset by peer . Исключение был поднят по шаблону остальных источников при выполнении postForObject() метод. Для меня проблемой был слишком длинный HTTP URL запрос. Поэтому сначала проверьте, является ли созданный URL-адрес тем, что он должен быть, и если ваш сервер действительно должен иметь возможность обрабатывать запросы такой длины, просто перейдите к конфигурации сервера и поднимите допустимую длину URL-запросов по умолчанию.
это решило проблему для меня, но помните: приложение может не работать в некоторых интернет-браузерах, особенно старых, так как они имеют фиксированную максимальную длину URL-запросов.
надеюсь, что это помогает.
Я получил эту ошибку, когда текстовый файл, который я пытался прочитать, содержал строку, которая соответствовала антивирусной подписи на нашем брандмауэре.
я столкнулся с этой проблемой. Это вызвано заблокированными сеансами в базе данных, которые связаны с таблицами, которые вы собираетесь изменить через Webservice.
найти заблокированные идентификаторы сеанса:
это должно дать вам подсказки о том, что таблица заблокирована, но еще не завершает изменения.
затем удалите его в v$session :
(99 например.)
Источник