A
Andreas
Gast
Hallo!
Also ich habe noch wenig Ahnung von Java, einige Dinge kommen mir durch die Objektorientierung etwas seltsam vor ;-)
Ich habe ein Beispiel-Programm, einen einfachesn Socket-Server, der einfach nur dei gelesen Strings zurück auf das Socket schreibt. Jetzt war das Beispiel wohl schon etwas älter, das heißt die Methode readline von InputStreamReader ist wohl deprecated. Das geht zwar, aber ich will ja nicht direkt so anfangen, sondern das dann auch richtig machen. Also habe ich in der Doku nachgesehen, und da stand, dass ich
DataInputStream d = new DataInputStream(in);
durch
BufferedReader d = new BufferedReader(new InputStreamReader(in));
ersetzen soll. Gut, das habe ich jetzt mal gemacht, was sagt Ihr dazu:
Und es funktioniert auch, nur kommt mir das nicht so effizient vor für jede Zeile ein neues Objekt zu initialisieren, oder? Würdet Ihr das anders machen?
Durch die Eingabe von "shutdown" lasse ich den Server beenden.
Gibt es in Java eigentlich auch eine einfache Möglichkeit einen solchen Server mit Stack und Worker-Threads zu implementieren? Also dass man die eingehenden Anfragen auf einen virtuellen Stapel legt den eine festgelegte Anzahl an Worker-Threads abarbeitet?
Welche Klassen/Methoden würdet Ihr zum schreiben und lesen vom Socket verwenden?
Grüße
Andreas
Also ich habe noch wenig Ahnung von Java, einige Dinge kommen mir durch die Objektorientierung etwas seltsam vor ;-)
Ich habe ein Beispiel-Programm, einen einfachesn Socket-Server, der einfach nur dei gelesen Strings zurück auf das Socket schreibt. Jetzt war das Beispiel wohl schon etwas älter, das heißt die Methode readline von InputStreamReader ist wohl deprecated. Das geht zwar, aber ich will ja nicht direkt so anfangen, sondern das dann auch richtig machen. Also habe ich in der Doku nachgesehen, und da stand, dass ich
DataInputStream d = new DataInputStream(in);
durch
BufferedReader d = new BufferedReader(new InputStreamReader(in));
ersetzen soll. Gut, das habe ich jetzt mal gemacht, was sagt Ihr dazu:
Code:
import java.io.*;
import java.net.*;
public class server {
public static void main(String args[]) {
int anz = 1;
try {
ServerSocket ss = new ServerSocket(7788);
while(true) {
Socket sverb = ss.accept();
System.out.println(" Verbindung " + anz);
new ServerThread(sverb,anz).start();
anz++;
}
}
catch (Exception e) {
System.out.println(e);
}
}
}
class ServerThread extends Thread {
Socket sverb;
int nverb;
ServerThread(Socket s , int n) {
this.sverb = s;
this.nverb = n;
}
public void run () {
try {
//DataInputStream in =
// new DataInputStream(sverb.getInputStream());
BufferedReader in =
new BufferedReader(new InputStreamReader(sverb.getInputStream()));
PrintStream out =
new PrintStream(sverb.getOutputStream());
out.println( "Hallo - Willkommen beim Simple-Echo-Server!\r\n");
boolean weiter = true;
while (weiter) {
String str = in.readLine();
if (str == null) weiter = false;
else {
out.println("Enter ciao "+nverb+" : "+str);
if (str.trim().equals("ciao")) {
out.println( "Der Verbindung wurde beendet.");
weiter=false;
}
if (str.trim().equals("shutdown")) {
out.println(" Server wird beendet");
System.out.println("Server wurde beendet");
System.exit( 0 );
}
}
}
sverb.close();
}
catch (IOException e) {
System.out.println(e);
}
}
}
Und es funktioniert auch, nur kommt mir das nicht so effizient vor für jede Zeile ein neues Objekt zu initialisieren, oder? Würdet Ihr das anders machen?
Durch die Eingabe von "shutdown" lasse ich den Server beenden.
Gibt es in Java eigentlich auch eine einfache Möglichkeit einen solchen Server mit Stack und Worker-Threads zu implementieren? Also dass man die eingehenden Anfragen auf einen virtuellen Stapel legt den eine festgelegte Anzahl an Worker-Threads abarbeitet?
Welche Klassen/Methoden würdet Ihr zum schreiben und lesen vom Socket verwenden?
Grüße
Andreas