JackBauer8283
Mitglied
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:
Client lesen:
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
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