# Server und Client



## Gast23 (19. Sep 2005)

Hallo Forum,

versuche 2 programme laufen zu lassen. Das Eine soll über den Status des Anderen berichten, spricht irgendwie müssen die wohl voneinander wissen. Wenn also mein "Server" abstürzen  oder sich aufhängen sollte, mein "Client" soll mich entsprechend benachrichtigen. Die Idee ist also einen Server und einen Client laufen zu lassen. Hab folgenden Code zusammen: 

```
public class Client extends Thread{
    public Client() {
    }
    public static void main( String args[] ) {
        new Client().start();
    }    
    public void run() {
        try{
            Socket server = new Socket( "localhost", 3141 );
            InputStream in = server.getInputStream();
            OutputStream out = server.getOutputStream();
            int antwort=0;
            while(true){
             out.write(1);            
                antwort = in.read();
                if (antwort == 1)
                 System.out.println("Antwort vom Server ist: Ich lebe! :-)");
                else
                 System.out.println("Keine Rückmeldung vom Server!!!!!");
                Thread.sleep(1000);
            }
        }catch(Exception w){
            System.out.println(w.getLocalizedMessage());
        }
        
    }
}

public class EchoServer extends Thread{
    public static void main( String args[] ) throws IOException {
        new EchoServer().start();
    }
    
    public void run() {
        try{
        ServerSocket server = new ServerSocket( 3141 );        
        while ( true ) {
            Socket client = server.accept();
            InputStream  in  = client.getInputStream();
            OutputStream out = client.getOutputStream();
            int antwort = in.read();
            out.write( antwort );
            Thread.sleep(100);
            client.close();
        }
        }catch (Exception e){
            System.out.println(e.getLocalizedMessage());
        }
    }
}
```

Nun, der erste Durchlauf ist OK, danach bleibt alles stehen. Ich möchte es so in etwa einrichten dass ich alle 10 Sekunden abfragen kann ob der Server noch läuft. Wenn nicht halt die Meldung auf die ich dann reagiere.
Weiss einer eventuell welche Codeänderungen dafür nötig wären hierbei?

Danke für jede Hilfe

Gruß


----------



## Guest (19. Sep 2005)

```
public class EchoServer extends Thread{
    public static void main( String args[] ) throws IOException {
        new EchoServer().start();
    }
    
    public void run() {
        try{
        ServerSocket server = new ServerSocket( 3141 );        
            Socket client = server.accept();
            InputStream  in  = client.getInputStream();
            OutputStream out = client.getOutputStream();
        while ( true ) {
            int antwort = in.read();
            out.write( antwort );
            Thread.sleep(100);
        }
        }catch (Exception e){
            System.out.println(e.getLocalizedMessage());
        }
    }
}
```

wenn du den socket nach einmal senden schliesst kann das ja nicht gehen.


----------



## Gast23 (20. Sep 2005)

Danke für den Hinweis!

Nach einiger Arbeit schaffte ich es dass die mitaneinander durch austauschen von eine "1" komunizieren. Das geht dann so...


```
public class Client extends Thread{
    public Client() {  }
    public static void main( String args[] ) {
        new Client().start();
    }    
    public void run() {
        Socket server = null;
        InputStream in = null;
        OutputStream out = null;
        try{
            int antwort;
            while(true){
                antwort=0;
                server = new Socket( "localhost", 5789 );
                in = server.getInputStream();
                out = server.getOutputStream();
                out.write(1);                
                antwort = in.read();
                if (antwort == 1)
                    System.out.println("Antwort vom Server ist: Ich lebe! :-) " + antwort);
                else 
                    System.out.println("Keine Rückmeldung vom Server!!!!!");
                server.close();
                Thread.sleep(5000);
            }
        }catch(Exception w){
            try{ Thread.currentThread().sleep(5000); }
            catch (Exception ex){ System.out.println("Thread konnte nicht einschlafen!"); }            
            Thread.currentThread().interrupt();
            System.out.println("Keine Antwort vom server. Thread wird neu gestartet!");
            new Thread(this).start();                        
        }        
    }
}

public class Server extends Thread{
    public static void main( String args[] ) throws IOException {
        new EchoServer().start();
    }    
    public void run() {
        Socket client = null;
        try{
            ServerSocket server = new ServerSocket( 5789);
            InputStream  in = null;
            OutputStream out = null;
            int antwort = 0;
            server.setSoTimeout(0);
            while ( true ) {
                client = server.accept();
                in  = client.getInputStream();
                out = client.getOutputStream();
                antwort = in.read();
                out.write( antwort );
            }
        }catch (Exception e){
            System.out.println(e.getLocalizedMessage());
        }
    }    
}
```


Jedenfalls bekomme ich jetzt die Connection zwischen den Beiden. Da ich aber mehr vom Server brauche (Status z.B. "running", anzahl der connected Clients...) müsste ich die Komunikation über BufferedReader, InputStreamReader, BufferedWriter und OutputStreamWriter laufen lassen. Nun habe ich schon einiges ausprobiert was nicht lief. Wüsste vielleicht einer wie ich diese Klassen richtig einsetzte?

Vielen dank für jede Antwort...


----------

