Datei über Server auslesen

Hab den Code jetzt etwas abgeändert, nun gibt er mir eine genauere Fehlerbeschreibung aus. Leide weiß ich nicht warum der Socket geschlossen wurde und wie ich das Problem lösen kann.

Server:
Code:
import java.io.*;
import java.net.*;

public class Server
{
  public static void main(String[] args)
  {
    try
    {
      //Server starten
      ServerSocket server = new ServerSocket(1234);

      //warte auf Verbindung
      System.out.println("Warte auf Verbindung.");
      Socket s = server.accept();
      System.out.println("Verbunden.");

      //neue Verbindung ist da, wir lesen einfach aus,
      //was sie uns so schickt und schicken alles wieder zurück
      BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
      String text = in.readLine();
      String [] messagesplit = text.split("§");
      String befehl = messagesplit[0];
      String nachricht = messagesplit[1];
      String befehlspeichern = "speichern";
      String befehllesen = "lesen";

      if (befehl.equals(befehlspeichern))
      {
        System.out.println("1");
        System.out.println("Befehl: " + befehl);
        System.out.println("Nachricht empfangen: " + nachricht);
        BufferedWriter outspeichern = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("Datenbank.txt", true)));
        outspeichern.write(nachricht);
        outspeichern.newLine();
        outspeichern.flush();
        System.out.println("Empfange Nachricht wurde erfolgreich in die Datei 'Datenbank.txt' geschrieben.");
        outspeichern.close();
      }

      else if (befehl.equals(befehllesen))
      {
        System.out.println("2");
        System.out.println("Befehl: " + befehl);
        System.out.println("Nachricht empfangen: " + nachricht);
        BufferedWriter outlesen = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
        outlesen.write(nachricht);
        outlesen.newLine();
        outlesen.flush();
        System.out.println("Nachricht zurückgesendet.");
        outlesen.close();
      }
      
      BufferedWriter out = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
      out.write("Fertig");
      out.newLine();
      out.flush();
      
      //aufräumen
      out.close();
      in.close();
      server.close();
      System.out.println("Server geschlossen.");
    }

    catch (FileNotFoundException e)
    {
      e.printStackTrace();
    }

    catch (IOException io)
    {
      io.printStackTrace();
    }
  }
}

Client lesen:
Code:
import java.io.*;
import java.net.*;

public class ClientAusDateiLesen
{
  public static void main(String[] args)
  {
    try
    {
      //Socket auf Lokalhost Port 5678 konstruieren
      Socket s = new Socket("localhost", 1234);

      //aus der Datei "Datenbank.txt" auslesen und über den Socket versenden
      BufferedReader readin = new BufferedReader(new InputStreamReader(new FileInputStream("Datenbank.txt")));
      String versenden = readin.readLine();
      BufferedWriter out = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
      String lesen = "lesen§";
      out.write(lesen);
      out.write(versenden);
      System.out.println("Sende " + versenden + " an Server Port 1234.");
      
      //Zeilenumbruch senden
      out.newLine();
      out.flush();
      
      //BufferedReader konstruieren
      BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
      
      //eine Zeile lesen
      String text = in.readLine();
      
      //und ausgeben
      System.out.println("Empfangen: " + text);
      in.readLine();
      
      //Reader und Writer schließen
      readin.close();
      out.close();
      in.close();
      
      System.out.println("Beendet.");
    }

    catch (FileNotFoundException e)
    {
      e.printStackTrace();
    }

    catch (IOException io)
    {
      io.printStackTrace();
    }
  }
}

Nachricht Server:
Warte auf Verbindung.
Verbunden.
2
Befehl: lesen
Nachricht empfangen: Hallo
Nachricht zurückgesendet.
java.net.SocketException: Socket is closed
at java.net.Socket.getOutputStream<Socket.java:808>
at Server.main<Server.java:54>
Der Befehl "sDateiLesen" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.

Nachricht Client:
Sende Hallo an Server Port 1234
Empfangen: Hallo
Beendet.

Vor Beendet sollte eigentlich noch Fertig vom Server an den Client übergeben werden aber das macht er nicht. Wo liegt der Fehler?

Vielen Dank für jede Hilfe.

MfG
 
Zurück