Я получаю следующую ошибку, пытающуюся прочитать из сокета. Я делаю readInt() в этом InputStream , и я получаю эту ошибку. Прослушивание документации показывает, что клиентская часть соединения закрыла соединение. В этом случае я сервер.
У меня есть доступ к файлам журнала клиента, и он не закрывает соединение, и на самом деле его файлы журнала предполагают, что я закрываю соединение. Так кто-нибудь есть идея, почему это происходит? Что еще проверить? Это происходит, когда есть локальные ресурсы, которые, возможно, достигают пороговых значений?
Я отмечаю, что у меня есть следующая строка:
socket.setSoTimeout(10000);
непосредственно перед readInt() . Есть причина для этого (длинный рассказ), но просто любопытно, существуют ли обстоятельства, при которых это может привести к указанной ошибке? У меня есть сервер, работающий в моей среде IDE, и мне пришлось оставить свою среду IDE на точке останова, и я заметил, что те же самые ошибки появляются в моих собственных журналах в моей среде IDE.
Не могу зайти на сервер | internal exception java net socketexception | Фикс ошибки 2022
В любом случае, просто упомянув об этом, надеюсь, не красная сельдь.: — (
ОТВЕТЫ
Ответ 1
Существует несколько возможных причин.
- На другом конце умышленно reset соединение, таким образом, что я не буду документировать здесь. Редко и, как правило, неверно, для прикладного программного обеспечения это делать, но это не известно для коммерческого программного обеспечения.
- Чаще всего это вызвано записью на соединение, что другой конец уже закрыт нормально. Другими словами, ошибка протокола приложения.
- Это также может быть вызвано закрытием сокета, когда в буфере приема сокета есть непрочитанные данные.
- В Windows «программное обеспечение вызвало прерывание соединения», которое не совпадает с «соединением reset», вызвано сбоем сетевых проблем с вашего конца. Здесь есть статья базы знаний Microsoft.
Ответ 2
Соединение reset просто означает, что был получен TCP RST. Это происходит, когда ваш партнер получает данные, которые он не может обработать, и для этого могут быть разные причины.
Простейшим является закрытие сокета, а затем запись большего количества данных в выходной поток. Закрыв сокет, вы сказали своему коллеге, что вы закончили говорить, и он может забыть о вашем соединении. Когда вы все равно отправляете больше данных об этом потоке, эксперт отвергает его с помощью RST, чтобы вы знали, что он не прослушивает.
В других случаях промежуточный брандмауэр или даже сам удаленный хост могут «забыть» о вашем TCP-соединении. Это может произойти, если вы не отправляете какие-либо данные в течение длительного времени (2 часа — общий тайм-аут), или потому, что сверстник перезагружен и потерял информацию об активных соединениях. Отправка данных по одному из этих несовместимых соединений вызовет также RST.
Обновление в ответ на дополнительную информацию:
Посмотрите внимательно на обработку SocketTimeoutException . Это исключение возникает, если превышен установленный тайм-аут при блокировке операции сокета. Состояние самого сокета не изменяется при вызове этого исключения, но если ваш обработчик исключений закрывает сокет, а затем пытается его записать, вы будете в состоянии соединения reset. setSoTimeout() призван дать вам чистый способ выйти из операции read() , которая в противном случае могла бы блокироваться навсегда, без каких-либо грязных действий, таких как закрытие сокета из другого потока.
Не могу зайти на сервер | Ошибка internal exception java.io.IOException | Фикс 2022 | java.net 1.19
Ответ 3
Всякий раз, когда у меня были такие странные проблемы, я обычно сажусь с помощью инструмента WireShark и смотрю на переданные необработанные данные назад и вперед. Вы можете быть удивлены, когда что-то отключается, и вы только уведомляетесь, когда пытаетесь прочитать.
Ответ 4
Смутившись сказать это, но когда у меня возникла эта проблема, было просто ошибкой, что я закрывал соединение, прежде чем я прочитал все данные. В случаях, когда возвращались маленькие строки, это сработало, но, вероятно, из-за того, что весь ответ был буферизирован, я не закрыл его.
В случае большего количества возвращаемого текста исключение было выбрано, так как больше возвращался буфер.
Вы можете проверить этот контроль. Помните, что открытие URL-адреса похоже на файл, обязательно закройте его (отпустите соединение) после его полного чтения.
Ответ 5
Вы должны тщательно осмотреть весь след,
У меня есть приложение для подключения к серверу и исправлено событие java.net.SocketException: Connection reset .
В моем случае это происходит при чтении с объекта clientSocket Socket , который по какой-то причине закрывает его соединение. (Потеря сети, брандмауэр или сбой приложения или предполагаемое закрытие)
На самом деле я восстанавливал соединение, когда получал ошибку при чтении с этого объекта Socket.
Socket clientSocket = ServerSocket.accept(); is = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); int readed = is.read(); // WHERE ERROR STARTS .
Интересно, что for my JAVA Socket , если клиент подключается к моему ServerSocket и закрывает его соединение, не отправляя ничего is.read() вызывает себя рекурсивно. Кажется, из-за того, что в бесконечном цикле для чтения из этого сокета вы пытаетесь для чтения из закрытого соединения. Если вы используете что-то вроде операции чтения,
while(true)
Затем вы получаете stackTrace, как показано ниже, и
java.net.SocketException: Socket is closed at java.net.ServerSocket.accept(ServerSocket.java:494)
То, что я сделал, — это просто закрыть ServerSocket и обновить мое соединение и ждать дальнейших входящих клиентских подключений.
String Receive() throws Exception < try < int readed = is.read(); . >catch(Exception e) < tryReConnect(); logit(); //etc >//. >
Это восстанавливает мое соединение для неизвестного потерянного сокета клиента
private void tryReConnect() < try < ServerSocket.close(); //empty my old lost connection and let it get by garbage col. immediately clientSocket=null; System.gc(); //Wait a new client Socket connection and address this to my local variable clientSocket= ServerSocket.accept(); // Waiting for another Connection System.out.println(«Connection established. «); >catch (Exception e) < String message=»ReConnect not successful «+e.getMessage(); logit();//etc. >>
Я не мог найти другого способа, потому что, как вы видите ниже, вы не можете понять, потеряно ли соединение или нет без try and catch , потому что все кажется правильным. Я получил этот снимок, пока я непрерывно получал Connection reset .
Ответ 6
У меня была такая же ошибка. Я нашел решение проблемы сейчас. Проблема заключалась в том, что клиентская программа заканчивалась до того, как сервер прочитал потоки.
Ответ 7
У меня была эта проблема с системой SOA, написанной на Java. Я работал как с клиентом, так и с сервером на разных физических машинах, и они отлично работали в течение длительного времени, затем эти неприятные сбрасывания соединений появились в журнале клиентов, и в журнале сервера не было ничего странного. Перезапуск клиента и сервера не помогло решить проблему. Наконец, мы обнаружили, что куча на стороне сервера была довольно полной, поэтому мы увеличили доступную память для JVM: проблема решена! Обратите внимание, что в журнале не было OutOfMemoryError: память была просто скудной, а не исчерпанной.
Ответ 8
У меня также была эта проблема с программой Java, пытающейся отправить команду на сервер через SSH. Проблема заключалась в том, что машина выполнила код Java. У него не было разрешения на подключение к удаленному серверу. Метод write() выполнял все в порядке, но метод read() выбрал java.net.SocketException: Connection reset. Я исправил эту проблему, добавив ключ SSH клиента к известным ключам удаленного сервера.
Ответ 9
Проверьте версию вашего сервера Java. Произошло со мной, потому что мой Weblogic 10.3.6 был на JDK 1.7.0_75, который был на TLSv1. Остальной конечной точкой, которую я пытался использовать, было отключение чего-либо ниже TLSv1.2.
По умолчанию Weblogic пытался согласовать самый сильный общий протокол. Подробнее см. здесь: Проблемы с настройкой системного свойства https.protocols для подключений HTTPS.
Я добавил подробное протоколирование SSL, чтобы определить поддерживаемый TLS. Это указывало на то, что TLSv1 использовался для рукопожатия.
-Djavax.net.debug=ssl:handshake:verbose:keymanager:trustmanager -Djava.security.debug=access:stack
Я решил эту проблему, добавив эту функцию в наш JDK8-совместимый продукт, по умолчанию JDK8 — TLSv1.2. Для тех, кто ограничен JDK7, я также успешно протестировал обходной путь для Java 7 путем обновления до TLSv1.2. Я использовал этот ответ: Как включить TLS 1.2 в Java 7
Источник: utyatnishna.ru
internal exception: java.net.socketexception: connection res
Написал 12.04.2011 — 17:58
Здравствуйте.Захотелось нам однажды с друзьями поиграь в майнкрафт вместе,по сети. Ну создал человек один сервер,создали комнатку в хамачи,запустили,все начали играть. Решил и я к ним пресоединиться. После захода на серв действия разворачиваються так: 1.Появляюсь и начинаю падать кудато далеко и долго вниз.
2.Появляюсь на осторовке где-то с минуту побегаю и выкидывает с сервера с такой ошибкой — internal exception: java.net.socketexception: connection reset. Возможно вам уже задавали такой вопрос. Надеюсь вы знаете решение.
#2
alex55
Написал 12.04.2011 — 19:28
Do this:Click the followingStart Button -> Control Panel -> Hardware and Sound -> Device Manager -> Network AdaptersRight Click the Atheros Card -> Properties -> AdvancedSelect Transmit Buffers, and change the value from 256 to 512.***Select Each of the things with «Checksum Offload» and disable them.Click OkayRun Minecraft
#3
sn3jkeee
Написал 12.04.2011 — 19:43
Я смотрел офф форум. Мне не помогло.
#4
АНТОН2002543
АНТОН2002543
Написал 15.11.2013 — 14:43
Количество пользователей, читающих эту тему: 0
0 пользователей, 0 гостей, 0 анонимных
Ответить цитируемым сообщениям Очистить
- Minecrafting.ru
- → Обсуждение игры
- → Технические проблемы
- Русский (RU)
- English (USA)
- Русский (RU)
Источник: minecrafting.ru
Что вызывает мое java. net. SocketException: сброс соединения?
мы видим часто java.net.SocketException: Connection reset ошибки в наших журналах для компонента, который вызывает стороннюю веб-службу, которая отправляет SMS-сообщения.
наше приложение написано на Java и работает на базе Tomcat 5.5. Его написали подрядчики, которых у нас больше нет. Текущая команда не имеет реального опыта Java, и мы не уверены, где Connection reset ошибка на самом деле и откуда, и как идти об отладке.
проблема кажется полностью прерывистой, и не связаны с сообщениями, которые мы пытаемся отправить.
любые предложения о том, что типичные причины этого исключения могут быть, и как мы могли бы продолжить, приветствуются.
весь стек вызовов включен ниже для полноты.
( com.companyname.mtix.sms это наша составляющая)
java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:168)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
at java.io.BufferedInputStream.read(BufferedInputStream.java:235)
at org.apache.commons.httpclient.HttpParser.readRawLine(HttpParser.java:77)
at org.apache.commons.httpclient.HttpParser.readLine(HttpParser.java:105)
at org.apache.commons.httpclient.HttpConnection.readLine(HttpConnection.java:1115)
at org.apache.commons.httpclient.HttpMethodBase.readStatusLine(HttpMethodBase.java:1832)
at org.apache.commons.httpclient.HttpMethodBase.readResponse(HttpMethodBase.java:1590)
at org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.java:995)
at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:397)
at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:170)
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:396)
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:324)
at com.companyname.mtix.sms.services.impl.message.SendTextMessage.sendTextMessage(SendTextMessage.java:127)
at com.companyname.mtix.sms.services.MessageServiceImpl.sendTextMessage(MessageServiceImpl.java:125)
at com.companyname.mtix.sms.services.remote.MessageServiceRemoteImpl.sendTextMessage(MessageServiceRemoteImpl.java:43)
at sun.reflect.GeneratedMethodAccessor203.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.apache.axis.providers.java.RPCProvider.invokeMethod(RPCProvider.java:397)
at org.apache.axis.providers.java.RPCProvider.processMessage(RPCProvider.java:186)
at org.apache.axis.providers.java.JavaProvider.invoke(JavaProvider.java:323)
at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
at org.apache.axis.handlers.soap.SOAPService.invoke(SOAPService.java:453)
at org.apache.axis.server.AxisServer.invoke(AxisServer.java:281)
at org.apache.axis.transport.http.AxisServlet.doPost(AxisServlet.java:699)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
at org.apache.axis.transport.http.AxisServletBase.service(AxisServletBase.java:327)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at com.companyname.mtix.sms.http.filters.NoCacheFilter.doFilter(NoCacheFilter.java:63)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at com.companyname.mtix.sms.http.filters.MessageFilter.doFilter(MessageFilter.java:53)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:61)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:77)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.ajaxanywhere.AAFilter.doFilter(AAFilter.java:46)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:541)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Thread.java:595)
Edit
строка нашего кода, из которой выбрасывается исключение, является последней строкой в приведенном ниже фрагменте кода.
String aggregatorResponse = null;
HttpClient httpClient = prepareHttpClient( username, password );
PostMethod postMethod = preparePostMethod( textUrl );
try SybaseTextMessageBuilder builder = new SybaseTextMessageBuilder();
URL notifyUrl = buildNotificationUrl( textMessage, codeSetManager );
String smsRequestDocument = builder.buildTextMessage( textMessage, notifyUrl );
LOG.debug( «Sybase MT document created as: n» + smsRequestDocument );
postMethod.setRequestEntity( new StringRequestEntity( smsRequestDocument ) );
LOG.debug( «commiting SMS to aggregator: » + textMessage.toString() );
int httpStatus = httpClient.executeMethod( postMethod );
Источник: codengineering.net