5 Stimmen

Was sollte ich tun, wenn eine IOException ausgelöst wird?

Ich habe die folgenden 3 Zeilen des Codes:

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

Der Compiler beschwert sich über alle 3 Zeilen, und die Beschwerde ist für alle 3 Zeilen die gleiche: unreported exception java.io.IOException; Genauer gesagt werden diese Ausnahmen ausgelöst durch new ServerSocket , accept() y getInputStream() .

Ich weiß, dass ich Folgendes verwenden muss try ... catch ... . Aber dafür muss ich wissen, was diese Ausnahmen in jedem einzelnen Fall bedeuten (wie soll ich sie interpretieren). Wann treten sie auf? Ich meine, nicht im Allgemeinen, sondern in diesen 3 besonderen Fällen.

5voto

TomTom Punkte 1

Sie wissen es nicht BESONDERS, weil die IO-Ausnahme auch eine "generische" Ausnahme ist, die technisch gesehen viele Ursachen haben kann. Es bedeutet, dass ein unerwartetes Problem im Zusammenhang mit der Eingabe/Ausgabe aufgetreten ist, aber offensichtlich hat es auf der lokalen Festplatte andere Ursachen als im Internet.

Im Allgemeinen geht es bei allen drei Punkten um Steckdosen. Die Ursachen hängen also mit Netzwerkproblemen zusammen. Möglich sind:

  • Kein Netzwerk, nicht einmal localhost (wäre ein ernsthaftes technisches Problem).
  • Bereits verwendeter Port, wenn eine Portnummer angegeben wird (new Server Socket(earPort))
  • Netzwerkprobleme - zum Beispiel stolperte jemand über das Kabel, während etwas lief. Es kann auch eine Ursache für schlechte Qualität, einen DDOS-Angriff usw. sein.
  • Port erschöpft - kein clientseitiger Port für eine neue Verbindung verfügbar.

Im Wesentlichen um diese Linie.

Das Gleiche wird immer dann passieren oder passieren können, wenn Sie tatsächlich etwas mit den Streams machen.

In diesem Fall gibt es zwei mögliche Hauptursachen:

  • Erste Zeile: der Socket ist bereits in Gebrauch (Programm wurde 2 mal gestartet, gleicher Port wie das andere Programm). Dies lässt sich normalerweise nicht beheben, es sei denn, der Benutzer tut etwas.
  • Allgemeiner späterer Laufzeitfehler. Diese können während des normalen Betriebs auftreten.

1voto

Alexander Pogrebnyak Punkte 43705

Am einfachsten ist es, die aufrufende Methode so zu deklarieren, dass sie eine IOException auslöst, aber Sie müssen die zugewiesenen Ressourcen in finally Klauseln, bevor Sie Ihre Methode verlassen:

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( )
  }
}

1voto

Chris Nava Punkte 6432

Im Allgemeinen spielt es keine Rolle, was genau die anfängliche IOException verursacht hat, da Ihre Anwendung wenig tun kann, um die Situation zu korrigieren.

Als allgemeine Antwort auf Ihre Frage, was zu tun ist, haben Sie jedoch mehrere Möglichkeiten.

  • Erneut versuchen - Mai funktionieren, wenn das Problem intermittierend auftritt. Denken Sie daran, eine Unterbrechungsbedingung anzugeben, falls es nicht funktioniert.
  • Versuchen Sie etwas anderes - Laden Sie die Ressource von einem anderen Ort oder über eine andere Methode.
  • Aufgeben - Werfen Sie die Ausnahme und/oder brechen Sie die Aktion oder vielleicht das gesamte Programm ab. Vielleicht möchten Sie an dieser Stelle eine benutzerfreundliche Meldung ausgeben... ;-) Wenn Ihr Programm erfordert die Eingabe zu funktionieren, dann lässt Ihnen das Fehlen der Eingabe kaum eine andere Wahl als nicht zu funktionieren .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X