Что я должен сделать, если IOException брошен?

У меня есть следующие 3 строки кода:

ServerSocket listeningSocket = new ServerSocket(earPort);
Socket serverSideSocket = listeningSocket.accept();
BufferedReader in = new BufferedReader(new InputStreamReader(serverSideSocket.getInputStream()));

Компилятор жалуется на все эти 3 строки, и жаловаться то же для всех 3 строк: исключение, о котором не сообщают, java.io. IOException; Более подробно они исключение брошены new ServerSocket, accept() и getInputStream().

Я знаю, что должен использовать try ... catch .... Но для этого я должен знать то, что это исключения означают в каждом особом случае (как должен я интерпретировать их). Когда они происходят? Я имею в виду, не в целом, но в этих 3 особых случаях.

5
задан skaffman 23 March 2010 в 12:02
поделиться

3 ответа

Вы не знаете В ЧАСТНОСТИ, потому что исключение ввода-вывода также является "общим" исключением, которое может иметь много причин технически. Это означает, что возникла неожиданная проблема с вводом / выводом, но, очевидно, она имеет другие причины на локальном жестком диске, чем в Интернете.

В общем, все три предмета разрешаются вокруг сокетов. Итак, причины связаны с проблемами сети. Возможны следующие варианты:

  • Нет сети вообще, даже localhost (было бы серьезной технической проблемой).
  • Порт уже используется, если указан номер порта (новый серверный сокет (earPort)).
  • Проблемы с сетью - например, кто-то споткнулся о кабель во время чего-то. Также может быть причиной плохого качества, DDOS-атаки и т. Д.
  • Исчерпание порта - порт на стороне клиента недоступен для нового соединения.

В основном около этой линии.

То же самое произойдет или может произойти всякий раз, когда вы действительно что-то делаете с потоками.

В этом случае у вас есть две возможные основные причины:

  • Первая строка: сокет уже используется (программа запускалась 2 раза, тот же порт, что и другая программа). Очевидно, это обычно не исправимо, если пользователь что-то не делает.
  • Общая ошибка более позднего времени выполнения. Это может произойти во время нормальной работы.
5
ответ дан 14 December 2019 в 08:47
поделиться

Самый простой способ - объявить вызывающий метод для выдачи исключения IOException, но вам необходимо очистить выделенные ресурсы в предложениях finally , прежде чем вы оставите свой метод:

public void doSession ( ) throws IOException
{
  final ServerSocket listeningSocket = new ServerSocket(earPort);

  try
  {
    final Socket serverSideSocket = listeningSocket.accept();

    try
    {
      final BufferedReader in =
        new BufferedReader(
          new InputStreamReader(
            serverSideSocket.getInputStream()
          )
        );
    }
    finally
    {
      serverSideSocket.close( )
    }
  }
  finally
  {
    listeningSocket.close( )
  }
}
1
ответ дан 14 December 2019 в 08:47
поделиться

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

Однако в качестве общего ответа на ваш вопрос "что делать" у вас есть несколько вариантов.

  • Попробовать еще раз - Может сработать, если проблема была периодической. Не забудьте указать условие прерывания на случай, если это не сработает.
  • Попробуйте что-нибудь другое - загрузите ресурс из другого места или другим способом.
  • Сдаться - Выбросить/отбросить исключение и/или прервать действие или, возможно, всю программу. Возможно, на этом этапе вы захотите предоставить сообщение, удобное для пользователя... ;-) Если ваша программа требует входных данных для работы, то отсутствие входных данных не оставляет вам выбора, кроме как не работать.
1
ответ дан 14 December 2019 в 08:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: