Ошибка ioexception java net

java.net.SocketException in Java with Examples

SocketException 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. The full exception hierarchy of this error is:

java.lang.Object java.lang.Throwable java.lang.Exception java.io.IOException java.net.SocketException

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.

Implemented Interfaces: Serializable Direct Known Subclasses: BindException, ConnectException, NoRouteToHostException, PortUnreachableException

What is socket programming?

It is a programming concept that makes use of sockets to establish connections and enables multiple programs to interact with each other using a network. Sockets provide an interface to establish communication using the network protocol stack and enable programs to share messages over the network. Sockets are endpoints in network communications. A socket server is usually a multi-threaded server that can accept socket connection requests. A socket client is a program/process that initiates a socket communication request.

java.net.SocketException: Connection reset

This SocketException occurs on the server-side when the client closed the socket connection before the response could be returned over the socket. For example, by quitting the browser before the response was retrieved. Connection reset simply means that a TCP RST was received. TCP RST packet is that the remote side telling you the connection on which the previous TCP packet is sent is not recognized, maybe the connection has closed, maybe the port is not open, and something like these. A reset packet is simply one with no payload and with the RST bit set in the TCP header flags.

Now as of implementation it is clear that we need two programs one handling the client and the other handling the server. They are as follows:

Example 1: Server-side

Источник

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

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

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

Читайте также:  Динамический массив string java

Настоятельно рекомендуется использовать самый «определенный» класс исключений сокетов, который более точно определяет проблему. Стоит также отметить, что 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 не будет сброшен.

Читайте также:  Операторы работы со строками питон

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

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

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

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

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

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

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

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

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

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

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

Источник

IOException Класс

Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.

Сигнализирует о возникновении какого-либо исключения ввода-вывода.

[Android.Runtime.Register("java/io/IOException", DoNotGenerateAcw=true)] public class IOException : Java.Lang.Exception
[] type IOException = class inherit Exception

Комментарии

Части этой страницы являются изменениями, основанными на работе, созданной и совместно используемой проектом и используемой в соответствии с условиями, Creative Commons 2.5 Attribution License Creative Commons 2.5 Attribution License.

Конструкторы

Создает с null в качестве подробного IOException сообщения об ошибке.

Конструктор, используемый при создании управляемых представлений объектов JNI; вызывается средой выполнения.

Создает с IOException указанным подробным сообщением.

Создает объект IOException с указанным подробным сообщением и причиной.

Создает объект с указанной IOException причиной и подробным сообщением (cause==null ? null : cause.toString()) (который обычно содержит класс и подробное сообщение ). cause

Поля

Сигнализирует о возникновении какого-либо исключения ввода-вывода.

Свойства

Возвращает причину этого бросаемого объекта или null значение , если причина не существует или неизвестна.

Сигнализирует о возникновении какого-либо исключения ввода-вывода.

Дескриптор базового экземпляра Android.

Сигнализирует о возникновении какого-либо исключения ввода-вывода.

Сигнализирует о возникновении какого-либо исключения ввода-вывода.

Создает локализованное описание этого вызываемого объекта.

Возвращает строку подробного сообщения этого бросаемого объекта.

Сигнализирует о возникновении какого-либо исключения ввода-вывода.

Сигнализирует о возникновении какого-либо исключения ввода-вывода.

Этот API поддерживает инфраструктуру Mono для Android и не предназначен для использования непосредственно из кода.

Этот API поддерживает инфраструктуру Mono для Android и не предназначен для использования непосредственно из кода.

Методы

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

Сигнализирует о возникновении какого-либо исключения ввода-вывода.

Сигнализирует о возникновении какого-либо исключения ввода-вывода.

Заполняет трассировку стека выполнения.

Предоставляет программный доступ к сведениям трассировки стека, напечатанным с помощью #printStackTrace() .

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

Инициализирует причину этого вызываемого объекта указанным значением.

Выводит этот бросаемый объект и его обратную трассировку в стандартный поток ошибок.

Выводит этот бросаемый объект и его обратную трассировку в указанный поток печати.

Печатает этот бросаемый объект и его обратную трассировку в указанный модуль записи печати.

Задает элементы трассировки стека, которые будут возвращены #getStackTrace() и напечатаны соответствующими методами #printStackTrace() .

Сигнализирует о возникновении какого-либо исключения ввода-вывода.

Сигнализирует о возникновении какого-либо исключения ввода-вывода.

Явные реализации интерфейса

Сигнализирует о возникновении какого-либо исключения ввода-вывода.

Сигнализирует о возникновении какого-либо исключения ввода-вывода.

Сигнализирует о возникновении какого-либо исключения ввода-вывода.

Сигнализирует о возникновении какого-либо исключения ввода-вывода.

Сигнализирует о возникновении какого-либо исключения ввода-вывода.

Сигнализирует о возникновении какого-либо исключения ввода-вывода.

Сигнализирует о возникновении какого-либо исключения ввода-вывода.

Методы расширения

Выполняет преобразование типов, проверенное средой выполнения Android.

Сигнализирует о возникновении какого-либо исключения ввода-вывода.

Сигнализирует о возникновении какого-либо исключения ввода-вывода.

Источник

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