
Java Multithread Server
Der Multithread Server
Im Letzten Teil wurde ein Server erzeugt der einen Cleint nach dem anderen Bedienen kann.
Jetzt hat man oft das Problem das man mehrere Clients gleichzeitig bedienen möchte.
Um dieses Problem zu lösen nutzt man Multihread Server. d.H jeder Client hat seinen eigenen Thread in dem er läuft.
Jetzt kann zwar jeder Client sich mit dem Server verbinden aber noch keine Nachrichten untereinfander austauschen. Diese Erweiterung kommt später.
1 2 3 4 5 6 7 8 9 10 11 |
public class main { public static void main(String[] args) { //Demo mit einem Thread // zum Start Kommentar umsetzen! //SinglethreadServer t = new SinglethreadServer(); MultithreadServer t = new MultithreadServer(); t.starteServer(); } } |
Die erweiterte Java Serverklasse
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.InetAddress; import java.net.ServerSocket; import java.net.Socket; public class MultithreadServer { public void starteServer(){ try { //Starte den Server ServerSocket server = new ServerSocket(5555); //Gibt den Hoast und die IP auf der console aus. InetAddress adresse = InetAddress.getLocalHost(); System.out.println("Server gestartet \n" + "Server auf IP: " + adresse.getHostAddress() + adresse.getHostName()); //Startet einen Trhead für JEDE neue Verbindung: while (true){ Socket client = server.accept(); //den Thread Starten und den clienten übergeben: new echo(client).start(); } } catch (Exception e) { } } //den Thread in einer inneren Klasse laufen lassen: private class echo extends Thread{ private Socket client; public echo(Socket client){ //einfaches Setter im construktor um den empfangenen Socket zuzuordnen: this.client = client; } public void run(){ //Jetzt können wir auch direckt die IP vom Client. String clientAdresse; clientAdresse = client.getInetAddress().getHostAddress() + client.getInetAddress().getHostName(); System.out.println(clientAdresse); try { BufferedReader rein = new BufferedReader(new InputStreamReader(client.getInputStream())); PrintWriter senden = new PrintWriter(client.getOutputStream()); /** * Diese Endlosschleife ist dazu da jede anfrage der Clients anzunemen und zurück zu senden. * Eine Empfangene Nachricht wird in den Zwischenspeicher gelegt. * Anschliessend wird dieser String mit dem Wort "Antwort versehen" und zurück gesendet. */ String zwischenspeicher; while((zwischenspeicher = rein.readLine()) != null){ zwischenspeicher = "Antwort: " + zwischenspeicher; //Printwriter mit Inhalt füllen: senden.println(zwischenspeicher); //Printwriter senden: senden.flush(); //Zur sicherheit nochmal auf der Console ausgeben: System.out.println("Gesendt wurde: " + zwischenspeicher); } } catch (Exception e) { } } } } |
One thought on “Java Multithread Server”
Comments are closed.