kostenloser Webspace werbefrei: lima-city


Server <--> Client

lima-cityForumProgrammiersprachenJava

  1. Autor dieses Themas

    zyclop

    zyclop hat kostenlosen Webspace.

    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
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. p**i

    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
  4. Autor dieses Themas

    zyclop

    zyclop hat kostenlosen Webspace.

    Thx :) das wars^^ jetzt kann ich das ganze endlich fertig machen :biggrin:
  5. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!