# Server schliesst sich automatisch mit Client



## DragonBeta (23. Feb 2007)

Mahlzeit !

Mein Problem:

Bei meinem MatheTrainer Programm schliesst sich mein Server automatisch sobald ich den Client beende !

Soll er aba nich! Wieso macht er das ?
Kann mir jemand helfen ?

QUELLCODE SERVER :

```
import java.io.*;
import java.net.*;

public class MatheRechnerServer
{
   private static int zahl1;
   private static int zahl2;

  public static void main(String args[]) throws IOException
  {

    ServerSocket meinServer = new ServerSocket(1234);

    System.out.println("Der Mathe Trainer SERVER wurde gestartet");
    Socket clientSocket = meinServer.accept();

    BufferedReader vomClientLesen = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
    PrintStream zumClientSenden = new PrintStream(clientSocket.getOutputStream());

    
    boolean zahl = false;
    int ergebnis = 0;
    int ergebnisClient = 0;
    int versuche = 4;
    

       while(true)
      {
        if(zahl == false)
        {
          zahl1 = (int)(Math.random()*10);
          zahl2 = (int)(Math.random()*10);

          ergebnis =  zahl1 + zahl2;

          zumClientSenden.println(zahl1);
          zumClientSenden.println(zahl2);

          zahl = true;
        }

        ergebnisClient = Integer.parseInt(vomClientLesen.readLine());
        System.out.println(ergebnisClient);

        if(ergebnisClient != ergebnis)
        {
          versuche--;

          zumClientSenden.println("Das war falsch." + "Sie haben noch " + versuche +" Versuche");
          zumClientSenden.println(zahl1);
          zumClientSenden.println(zahl2);


           if (versuche == 0)
          {
            zumClientSenden.println("Alle Versuche verbraucht. Das Ergebnis lautet " + ergebnis);
            versuche = 4;
            zahl = false;

          }
        }
        else
        {
          zumClientSenden.println("Das war richtig");
          versuche = 4;
          zahl = false;

        }

      }






  }
}
```


QUELLCODE CLIENT


```
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import java.net.*;

/**
  *
  * Beschreibung
  *
  * @version 1.0 vom 09.02.2007
  * @author
  */

public class RechnerClientGUI extends JFrame
{
  // Anfang Variablen
  private JTextField Zahl1TextField = new JTextField();
  private JTextField Zahl2TextField = new JTextField();
  private JLabel Zahl1Label = new JLabel();
  private JLabel Zahl2Label = new JLabel();
  private JLabel TextLabel = new JLabel();
  private JButton sendenButton = new JButton();
  private JTextField ergebnisEingabeTextField = new JTextField();
  private static BufferedReader vomServerLesen;
  private static PrintStream zumServerSenden;


  
  // Ende Variablen

  public RechnerClientGUI(String title)
  {
    // Frame-Initialisierung
    super(title);
    addWindowListener(new WindowAdapter()
    {
      public void windowClosing(WindowEvent evt) { System.exit(0); }

    });
    int frameWidth = 379;
    int frameHeight = 256;
    setSize(frameWidth, frameHeight);
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    int x = (d.width - getSize().width) / 2;
    int y = (d.height - getSize().height) / 2 ;
    setLocation(x, y);
    Container cp = getContentPane();
    cp.setLayout(null);
    
    
    // Anfang Komponenten
    
    try
    {
      Socket serverSocket = new Socket("localhost" , 1234);
      vomServerLesen = new BufferedReader(new InputStreamReader(serverSocket.getInputStream()));
      zumServerSenden = new PrintStream(serverSocket.getOutputStream());

    }
    catch(Exception e)
    {
      System.out.println("No Connection to Server");
    }

    

    Zahl1TextField.setBounds(176, 8, 145, 32);
    Zahl1TextField.setText("");
    Zahl1TextField.setEditable(false);
    cp.add(Zahl1TextField);
    
    Zahl2TextField.setBounds(176, 56, 145, 32);
    Zahl2TextField.setText("");
    Zahl2TextField.setEditable(false);
    cp.add(Zahl2TextField);
    
    Zahl1Label.setBounds(56, 8, 114, 32);
    Zahl1Label.setText("Zahl 1 :");
    cp.add(Zahl1Label);
    
    Zahl2Label.setBounds(56, 56, 114, 32);
    Zahl2Label.setText("Zahl 2 :");
    cp.add(Zahl2Label);
    
    TextLabel.setBounds(48, 104, 274, 32);
    TextLabel.setText("Ergebnis der Addition : ");
    cp.add(TextLabel);

    sendenButton.setBounds(80, 176, 209, 41);
    sendenButton.setText("Senden");
    cp.add(sendenButton);
    
    sendenButton.addActionListener(new ActionListener()
    {
      public void actionPerformed(ActionEvent evt)
      {
        sendenButtonActionPerformed(evt);
      }
    });

    ergebnisEingabeTextField.setBounds(45, 144, 300, 24);
    ergebnisEingabeTextField.setText("");
    cp.add(ergebnisEingabeTextField);
    // Ende Komponenten

    setResizable(false);
    setVisible(true);
  }

  // Anfang Ereignisprozeduren
  public void sendenButtonActionPerformed(ActionEvent evt)
  {
     zumServerSenden.println(ergebnisEingabeTextField.getText());
  }

  // Ende Ereignisprozeduren

  public static void main(String[] args)
  {
    RechnerClientGUI meinRechner = new RechnerClientGUI("Mathe Tester");
    meinRechner.serverWarten();
  }
  
  private void serverWarten()
  {
  

      while(true)
     {
       try
       {

            Zahl1TextField.setText(vomServerLesen.readLine());
            Zahl2TextField.setText(vomServerLesen.readLine());

            ergebnisEingabeTextField.setText(vomServerLesen.readLine());
            
       }
       catch (IOException e)
       {
         System.out.println("Fehler beim Einlesen");
       }
     }
     



  }

}
```


----------



## Wildcard (23. Feb 2007)

DU bekommst eine Exception wenn der Client nicht mehr erreichbar ist.


----------



## DragonBeta (23. Feb 2007)

aha und wie muss ich dann vorgehen damit ich die nicht bekomme !

sorry bin nicht wirklich der experte in java


----------



## Wildcard (23. Feb 2007)

ZUm  beispiel ein Try/catch Block anstatt eines 'throws' Statements.


----------

