Hello :meld:
ich habe mein erstes total kompliziertes Java-Programm fertig :applaus:
Aber da sind echt so viele neue, schwere Sachen, es hätte mich interessiert, ob ich das wirklich alles richtig gemacht haben. Im Programm habe ich:
- Threads
- Streaming
- ErrorHandling
- Sockets
Das ist das Programm:
Mich würden interessieren:
- Habe ich das richtig gemacht, dass ich close in ein eigenes try-catch gegeben habe? In meinem Buch ist das nämlich nicht so. Ich dachte, dass close auf jeden Fall ausgeführt werden muss, falls es davor im ServerThread irgendwelche Probleme gab. Könnte man das vielleicht noch irgendwie vereinfachen?
- ServerThread erhält das this._oS von Server. Server übergibt das oS als call-by-reference, ist das richtig? Wenn ich also im ServerThread ein this._oS.close(); ausführe, wird das oS im Server geschlossen, stimmt das?
- Im Server verwende ich ein catch(Exception oE). In meinem Buch steht catch(IOException oE). Das habe ich geändert, weil start() eine IllegalThreadStateException auslösen könnte. Ist das richtig, dass mein catch IOException und IllegalThreadStateException abfängt? Habe ich diesen catch richtig programmiert?
- Ist das OK, dass ich vor ServerThread kein public gesetzt habe? Was ist das dann eigentlich? protected? Nur innerhalb des eigenen Pakets sichtbar? Ich habe das so gemacht, weil ich die beiden Klassen in 1 Datei haben wollte. Ist das OK?
- Ist das Programm - ganz allgemein betrachtet - OK? Stil OK? Vielleicht noch irgendwelche Fehler oder sonst etwas, was ich noch machen sollte?
- Gibt es eigentlich eine Möglichkeit, wie ServerThread Fehler an Server melden kann? Wenn also in run eine Exception auftritt, dass diese an Server weitergeleitet wird und erst in Server die eigentliche Fehlerbehandlung durchgeführt wird?
Eure Meinung würde mich echt interessieren. Das ist mein erstes komplizierte Java-Programm
ich habe mein erstes total kompliziertes Java-Programm fertig :applaus:
Aber da sind echt so viele neue, schwere Sachen, es hätte mich interessiert, ob ich das wirklich alles richtig gemacht haben. Im Programm habe ich:
- Threads
- Streaming
- ErrorHandling
- Sockets
Das ist das Programm:
Java:
import java.net.*; // Socket
import java.io.*; // Input-/Output-Stream
public class Server
{ public static void man (String[] arrArg)
{ try
{ ServerSocket oSS=new ServerSocket(80); // Port; ev. IOException
while(true)
{ Socket oS=oSS.accept(); // blockiert; wartet auf Client; ev. IOException
(new ServerThread(oS)).start(); // ruft ServerThread.run() auf; ev. IllegalThreadStateException
}
}
catch(Exception oE)
{ System.err.println(oE.toString());
}
}
}
class ServerThread extends Thread
{ private Socket _oS;
public ServerThread(Socket oS)
{ this._oS=oS;
}
public void run()
{ StringBuffer oSB=new StringBuffer();
try
{ InputStream oIS=this._oS.getInputStream(); // ev. IOException
OutputStream oOS=this._oS.getOutputStream(); // ev. IOException
int iC;
while((iC=oIS.read())!=-1) // ev. IOException
oSB.append((char)iC);
oOS.write((oSB.toString()).getBytes()); // ev. IOException
}
catch(IOException oE)
{ System.err.println(oE.toString());
}
try
{ this._oS.close(); // ev. IOException
}
catch(IOException oE)
{ System.err.println(oE.toString());
}
}
}
Mich würden interessieren:
- Habe ich das richtig gemacht, dass ich close in ein eigenes try-catch gegeben habe? In meinem Buch ist das nämlich nicht so. Ich dachte, dass close auf jeden Fall ausgeführt werden muss, falls es davor im ServerThread irgendwelche Probleme gab. Könnte man das vielleicht noch irgendwie vereinfachen?
- ServerThread erhält das this._oS von Server. Server übergibt das oS als call-by-reference, ist das richtig? Wenn ich also im ServerThread ein this._oS.close(); ausführe, wird das oS im Server geschlossen, stimmt das?
- Im Server verwende ich ein catch(Exception oE). In meinem Buch steht catch(IOException oE). Das habe ich geändert, weil start() eine IllegalThreadStateException auslösen könnte. Ist das richtig, dass mein catch IOException und IllegalThreadStateException abfängt? Habe ich diesen catch richtig programmiert?
- Ist das OK, dass ich vor ServerThread kein public gesetzt habe? Was ist das dann eigentlich? protected? Nur innerhalb des eigenen Pakets sichtbar? Ich habe das so gemacht, weil ich die beiden Klassen in 1 Datei haben wollte. Ist das OK?
- Ist das Programm - ganz allgemein betrachtet - OK? Stil OK? Vielleicht noch irgendwelche Fehler oder sonst etwas, was ich noch machen sollte?
- Gibt es eigentlich eine Möglichkeit, wie ServerThread Fehler an Server melden kann? Wenn also in run eine Exception auftritt, dass diese an Server weitergeleitet wird und erst in Server die eigentliche Fehlerbehandlung durchgeführt wird?
Eure Meinung würde mich echt interessieren. Das ist mein erstes komplizierte Java-Programm
Zuletzt bearbeitet: