Java net connectexception connection reset

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

Сразу сообщу, что если у вас проблема с игрой майнкрафт, то листайте в самый конец статьи, а пока информация для разработчиков и программистов.

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

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

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

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

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

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

package com.javacodegeeks.core.socketecxeption; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.ServerSocket; import java.net.Socket; import java.net.SocketTimeoutException; public class SimpleServerApp < public static void main(String[] args) throws InterruptedException < new Thread(new SimpleServer()).start(); >static class SimpleServer implements Runnable < @Override public void run() < ServerSocket serverSocket = null; try < serverSocket = new ServerSocket(3333); serverSocket.setSoTimeout(0); while (true) < try < Socket clientSocket = serverSocket.accept(); BufferedReader inputReader = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); System.out.println("Client said :"+ inputReader.readLine()); >catch (SocketTimeoutException e) < e.printStackTrace(); >> > catch (IOException e1) < e1.printStackTrace(); >finally < try < if (serverSocket != null) < serverSocket.close(); >> catch (IOException e) < e.printStackTrace(); >> > > >
package com.javacodegeeks.core.socketecxeption; import java.io.IOException; import java.io.PrintWriter; import java.net.Socket; import java.net.SocketException; import java.net.UnknownHostException; public class SimpleClientApp < public static void main(String[] args) < new Thread(new SimpleClient()).start(); >static class SimpleClient implements Runnable < @Override public void run() < Socket socket = null; try < socket = new Socket("localhost", 3333); PrintWriter outWriter = new PrintWriter(socket.getOutputStream(), true); System.out.println("Wait"); Thread.sleep(15000); outWriter.println("Hello Mr. Server!"); >catch (SocketException e) < e.printStackTrace(); >catch (InterruptedException e) < e.printStackTrace(); >catch (UnknownHostException e) < e.printStackTrace(); >catch (IOException e) < e.printStackTrace(); >finally < try < if (socket != null) socket.close(); >catch (IOException e) < e.printStackTrace(); >> > > >

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

java.net.SocketException: Connection reset at java.net.SocketInputStream.read(SocketInputStream.java:196) at java.net.SocketInputStream.read(SocketInputStream.java:122) at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:283) at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:325) at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:177) at java.io.InputStreamReader.read(InputStreamReader.java:184) at java.io.BufferedReader.fill(BufferedReader.java:154) at java.io.BufferedReader.readLine(BufferedReader.java:317) at java.io.BufferedReader.readLine(BufferedReader.java:382) at com.javacodegeeks.core.lang.NumberFormatExceptionExample. SimpleServerApp$SimpleServer.run(SimpleServerApp.java:36) at java.lang.Thread.run(Thread.java:744)

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

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

Читайте также:  Html скрипт на питоне

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

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

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

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

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

Если у вас проблема с minecraft, то чтобы решить проблему попробуйте сделать следующее:

  1. Обновите джаву, скачайте по ссылке https://www.java.com/ru/download/ новую версию и установите;
  2. Возможно блокирует антивирус или брандмауэр. Отключите антивирус и добавьте minecraft в список исключения в брандмауэре (или его можно выключить на время).
  3. При запуске игры, в правом нижнем углу отображается версия игры, если у вас не последняя версия, то обновите.
  4. Если у вас много расширений и модов, то это может приводить к багам, удалите последние установленные моды – это может решить проблему.
  5. Если вы используете платный сервер и у вас закончилась подписка, то опять же у вас будет такая ошибка.
Читайте также:  Javascript map object to string

Средняя оценка 2.1 / 5. Количество голосов: 104

Спасибо, помогите другим — напишите комментарий, добавьте информации к статье.

Видим, что вы не нашли ответ на свой вопрос.

Напишите комментарий, что можно добавить к статье, какой информации не хватает.

Источник

Fix: Internet Exception java.net.SocketException Connection Reset [MiniTool Tips]

Some people meet this connection lost error – Internal Exception: java.net.SocketException: Connection Reset – in Minecraft. So what does that mean? To fix this error, this article on MiniTool Website has issued some available methods and you can refer to that.

Internal Exception java.net.SocketException Connection Reset

Have you ever seen this connection lost error in Minecraft – Internal Exception java.net.SocketException Connection Reset? It is an annoying issue interrupting your attention and destroy the gaming experience when you are playing Minecraft.

The reasons that trigger this error are complicated and varied but don’t panic, you can try some easy tips to see if this java.net.SocketExeption Connection error can be fixed.

Fix the java.net.SocketException Connection Reset error

Fix 1: Change the DNS Server

The java.netsocketexeption error is probably made by the connection issue, so you can try to change the DNS sever and see if the issue can be resolved.

Step 1: Press the Win + S key to open the Search box and input control panel to open the result of Best match.

Step 2: Switch View by: to Small icons and choose Network and Sharing Center.

choose Network and Sharing Center

Step 3: Click on your Internet connection (Usually Ethernet) and choose Properties.

choose Properties

Step 4: In the next page, double-click on Internet Protocol Version 4 (CTP/IPv4) and check the options of Use the following IP address and Use the following DNS server addresses.

Step 5: Then input 8.8.8.8 for the box next to Preferred DNS server and 8.8.4.4 for the box next to Alternate DNS server.

Читайте также:  Асинхронная программа в python

input DNS server

Step 6: Check the box for Validate settings upon exit and choose OK to save your choice.

Full Guide to Fix DNS Server Unavailable in Windows 10

If you meet the DNS server unavailable error, then you can’t connect to your Internet. Thus, you can read this post to get some methods to fix it.

Fix 2: Renew Your System IP Address

To fix the java.net.SocketException Connection Reset error, another way is to release and renew your system IP address. Here is the way.

Step 1: Type cmd in Search and run Command Prompt as an administrator.

Step 2: When the Command Prompt window opens, you can enter the following commands and press Enter after every one of them.

When the command is finished, a new line appears at the bottom of the Command Prompt screen that contains an IP address. Then you can close the window and relaunch Minecraft to see if the issue is resolved.

Fix 3: Allow Minecraft though Windows Firewall

Your Windows Firewall may block Minecraft from running normally for its security consideration. You can try to disable Windows Firewall temporarily and see if the error message “Internal Exception: java.net.SocketException: Connection Reset” appears again.

Then you can add Minecraft to the white list so that Windows Firewall will allow Minecraft to run.

Step 1: Go to Start > Settings > Update & Security > Windows Security > Firewall & network protection.

Step 2: Then choose Allow an app through firewall and in another window, select Change settings and Allow another app….

Allow another app…

Step 3: Click Browse… to choose Minecraft EXE file and select Add to add it to the Firewall.

Bottom Line:

To fix the Internal Exception: java.net.SocketException: Connection Reset, the above methods will be helpful. Hope this article can resolve your issue.

About The Author

Anna is an editor of the MiniTool Team. She worked in this big family since her graduation. Her articles mainly focus on data backup and recovery, disk cloning, and file syncing, committed to resolving the data loss issues users may encounter on their PCs. Besides, more related computer articles are shared here. In her leisure time, she enjoys reading and watching movies. Travel can also be a good choice for her.

Источник

Оцените статью