Server <--> Client
lima-city → Forum → Programmiersprachen → Java
ausgabe
beispiel
beitrag
break
byte
catch
eingabezeile
exit
gruss
hilfe
import
klasse
main
nummer
socket
ungefhr
verbindung
verbundene client
vielen dank
warte
-
Hi, ich habe folgende Codes:
/* EchoServer.java */ import java.net.*; import java.io.*; public class EchoServer { public static void main(String[] args) { int cnt = 0; try { System.out.println("Warte auf Verbindungen auf Port 7..."); ServerSocket echod = new ServerSocket(7); while (true) { Socket socket = echod.accept(); (new EchoClientThread(++cnt, socket)).start(); } } catch (IOException e) { System.err.println(e.toString()); System.exit(1); } } } class EchoClientThread extends Thread { private int name; private Socket socket; public EchoClientThread(int name, Socket socket) { this.name = name; this.socket = socket; } public void run() { String msg = "EchoServer: Verbindung " + name; System.out.println(msg + " hergestellt"); try { InputStream in = socket.getInputStream(); OutputStream out = socket.getOutputStream(); out.write((msg + "\r\n").getBytes()); int c; while ((c = in.read()) != -1) { out.write((char)c); System.out.print((char)c); } System.out.println("Verbindung " + name + " wird beendet"); socket.close(); } catch (IOException e) { System.err.println(e.toString()); } } }
-------------------------------------------------------
/* EchoClient.java */ import java.net.*; import java.io.*; public class EchoClient { public static void main(String[] args) { if (args.length != 1) { System.err.println("Usage: java EchoClient <host>"); System.exit(1); } try { Socket sock = new Socket(args[0], 7); InputStream in = sock.getInputStream(); OutputStream out = sock.getOutputStream(); //Timeout setzen sock.setSoTimeout(300); //Ausgabethread erzeugen OutputThread th = new OutputThread(in); th.start(); //Schleife für Benutzereingaben BufferedReader conin = new BufferedReader( new InputStreamReader(System.in)); String line = ""; while (true) { //Eingabezeile lesen line = conin.readLine(); if (line.equalsIgnoreCase("QUIT")) { break; } //Eingabezeile an ECHO-Server schicken out.write(line.getBytes()); out.write('\r'); out.write('\n'); //Ausgabe abwarten th.yield(); } //Programm beenden System.out.println("terminating output thread..."); th.requestStop(); th.yield(); try { Thread.sleep(1000); } catch (InterruptedException e) { } in.close(); out.close(); sock.close(); } catch (IOException e) { System.err.println(e.toString()); System.exit(1); } } } class OutputThread extends Thread { InputStream in; boolean stoprequested; public OutputThread(InputStream in) { super(); this.in = in; stoprequested = false; } public synchronized void requestStop() { stoprequested = true; } public void run() { int len; byte[] b = new byte[100]; try { while (!stoprequested) { try { if ((len = in.read(b)) == -1) { break; } System.out.write(b, 0, len); } catch (InterruptedIOException e) { //nochmal versuchen } } } catch (IOException e) { System.err.println("OutputThread: " + e.toString()); } } }
Es wird eine Verbindung mit einem Server auf Port 7 hergestellt...
Jeder verbundene Client bekommt eine Nummer. Nun will ich wissen, wie ich die Echo Ausgabe vom Server an alle mit ihm verbundene Clients senden kann... D.H. was muss ich ändern???
Vielen Dank für eure Hilfe!
---zyclop
Beitrag geändert: 27.10.2006 9:38:43 von zyclop -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Moin zyclop,
Für Dein Vorhaben müsstest Du Deine Klasse EchoClientThread um einen PrintWriter erweitern.
Dein Server soll ja etwas senden, das auf die Konsole des Clienten 'geschrieben' wird.
Als Beispiel ungefähr so:
/** EchoClientThread **/ class EchoClientThread extends Thread{ private int name; private Socket s; private PrintWriter zumClient; public EchoClientThread(int name, Socket s) { try{ this.name = name; this.s = s; zumClient = new PrintWriter(s.getOutputStream(),true); } catch(IOException ex){ ex.printStackTrace(); } } public void run(){ try{ zumClient.println("Dieser Text wird zum Clienten gesendet."); } s.close(); catch(IOException ex){ ex.printStackTrace(); } } }
Gruss,
Puni
Beitrag geändert: 27.10.2006 11:23:45 von puni -
Thx :) das wars^^ jetzt kann ich das ganze endlich fertig machen
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage