# TicTacToe Server-Client Problem



## BlueJ_Noob (29. Mrz 2011)

Hey Leute,

ich sitze hier im Informatikunterricht und wir haben die Aufgabe ein Spiel,bei uns TicTacToe, zu programmieren und dieses per Sever-Client zu bedienen. Das Spiel und dessen Regeln sind bereits programmiert, jedoch :rtfm: haben wir Probleme bei der Einbettung des Servers bzw. des Clients???:L 

Hier der bisherige Quellcode:
Zunächst die Klasse Feld:

```
/**
 * 
 */
public class Feld
{
    public int inhalt;
    
    /**
     * 
     */
    public Feld () {
        this.inhalt = 0;
    }
    
    /**
     * 
     */
    public void set (int was) {
        this.inhalt = was;
    }
    
    /**
     * 
     */
    public int get () {
        return this.inhalt;
    }      
    
}
```

Hier die Klasse Brett:

```
import java.util.*;

/**
 * Frank J., Timm W., Philipp S.
 */
public class Brett
{
    ArrayList <Feld> felder;
    private boolean Sieg;
    
    /**
     * Erstellt das Objekt Brett,
     * welches neun Felder hat.
     */
    public Brett () {
        this.felder = new ArrayList <Feld> ();
        for (int i = 0; i < 9; i++) {
            this.felder.add (new Feld ());
        }
        this.Sieg = false;
    }   
    
    
     /**
     * Die Methode zum setzten des Inhalts.
     * Die Methode verwaltet automatisch wer an der Reihe ist (abwechselnd, beginnen tut Spieler 1).
     * Auszuwählen ist das Feld, in das man sein Symbol setzten will.
     * Definition: 0- 8; Felder zeilenweise nummeriert
     * Spieler 1: 1
     * Spieler 2: 2
     */
    public void set (int index, int spieler) {
        Siegescheck(index);
        if (Sieg == true) {
             System.out.println("Das Spiel ist bereits vorbei, wenn sie nochmal spielen möchten, starten sie ein neues Spiel mit der Methode reset.");
        }
        
        else {
           if (this.felder.get(index).get() >= 1){
               System.out.println("Feld ist schon belegt.");
            }
            else {
                 this.felder.get(index).set(spieler);
                 Siegescheck(index);
                 if (Sieg == true) {
                     System.out.println("Das Spiel ist vorbei, Spieler " + spieler + " gewinnt!");
                    }
                    else if(Sieg == false && this.felder.get(0).get() != 0 && this.felder.get(1).get() != 0 && this.felder.get(2).get() != 0 
                                          && this.felder.get(3).get() != 0 && this.felder.get(4).get() != 0 && this.felder.get(5).get() != 0 
                                          && this.felder.get(6).get() != 0 && this.felder.get(7).get() != 0 && this.felder.get(8).get() != 0)
                                          {
                                           System.out.println("Das Spiel ist vorbei, es geht unentschieden aus!");
                                         }
                    else {
                        
                    }
            }

    }
}
    
    
    /**
     * Interne Methode, die zum verwalten der Regeln benutzt wird.
     * Sie überprüft ob das Spiel bereits gewonnen ist.
     */
    private void Siegescheck(int index){
         for (int i = 0; i < 9; i++) {
            this.felder.get(index).get();
        }
        //Spieler 1:
        // horizontal
        if (this.felder.get(0).get() == 1 && this.felder.get(1).get() == 1 && this.felder.get(2).get() == 1){
            Sieg = true;
        } 
        else if (this.felder.get(3).get() == 1 && this.felder.get(4).get() == 1 && this.felder.get(5).get() == 1){
            Sieg = true;
        }
        else if (this.felder.get(6).get() == 1 && this.felder.get(7).get() == 1 && this.felder.get(8).get() == 1){
            Sieg = true;
        }
        
        // senkrecht
        else if (this.felder.get(0).get() == 1 && this.felder.get(3).get() == 1 && this.felder.get(6).get() == 1){
            Sieg = true;
        }
        else if (this.felder.get(1).get() == 1 && this.felder.get(4).get() == 1 && this.felder.get(7).get() == 1){
            Sieg = true;
        }
        else if (this.felder.get(2).get() == 1 && this.felder.get(5).get() == 1 && this.felder.get(8).get() == 1){
            Sieg = true;
        }
        
        // diagonal
         else if (this.felder.get(0).get() == 1 && this.felder.get(4).get() == 1 && this.felder.get(8).get() == 1){
            Sieg = true;
        }
        else if (this.felder.get(2).get() == 1 && this.felder.get(4).get() == 1 && this.felder.get(6).get() == 1){
            Sieg = true;    
            
        //Spieler 2:
        // horizontal
        if (this.felder.get(0).get() == 2 && this.felder.get(1).get() == 2 && this.felder.get(2).get() == 2){
            Sieg = true;
        }
        else if (this.felder.get(3).get() == 2 && this.felder.get(4).get() == 2 && this.felder.get(5).get() == 2){
            Sieg = true;
        }
        else if (this.felder.get(6).get() == 2 && this.felder.get(7).get() == 2 && this.felder.get(8).get() == 2){
            Sieg = true;
        }
        // senkrecht
        else if (this.felder.get(0).get() == 2 && this.felder.get(3).get() == 2 && this.felder.get(6).get() == 2){
            Sieg = true;
        }
        else if (this.felder.get(1).get() == 2 && this.felder.get(4).get() == 2 && this.felder.get(7).get() == 2){
            Sieg = true;
        }
        else if (this.felder.get(2).get() == 2 && this.felder.get(5).get() == 2 && this.felder.get(8).get() == 2){
            Sieg = true;
        }
        
        // diagonal
         else if (this.felder.get(0).get() == 2 && this.felder.get(4).get() == 2 && this.felder.get(8).get() == 2){
            Sieg = true;
        }
        else if (this.felder.get(2).get() == 2 && this.felder.get(4).get() == 2 && this.felder.get(6).get() == 2){
            Sieg = true;
        }
    }
}


    /**
     * Zeigt an ob das Spiel bereits gewonnen ist.
     */
    public boolean getSieg(){
        return this.Sieg;
    }

    /**
     * Zeigt bei dem gewünschten Feld den Inhalt an.
     * 0 = Kein Inhalt
     * 1 = Spieler 1
     * 2 = Spieler 2
     */
    public int getInhalt(int index){
        return this.felder.get(index).get();
    }
    

    /**
     * Startet das Spiel neu.
     */
    public void reset(){
        this.Sieg = false;
        int z = 0;
        for (int i = 0; i < 9; i++) {
            this.felder.get(z).set(0);
            z++;
        }
    }
    
}
```

Als Servergrundlage haben wir jetzt das hier:
DAs war früher ein Server der Zahlen verdoppelt hat,
wir wollen ihn jetzt umprogrammieren als TicTacToe-Server,
ALs Methoden bräuchten wir ja ne methode um ein Feld zu setzen ne,
frage ist jetzt natürlich noch ob wir noch weitere methoden brauche
um zu spielen, wie etwa ne get methode etc... ???:L

```
public class DoppelServer extends Server {

    final String ENDE = "*bye*";
    private Doppler doppler;

    public DoppelServer() {
      super(2000);   // Das ist der Port, auf dem der Server läuft!
      doppler = new Doppler ();
    }

    public void processNewConnection(String pClientIP, int pClientPort) {
      this.send(pClientIP, pClientPort, "Willkommen " + pClientIP + " auf Port "
        + pClientPort + " bei unserem Verdoppeler!");
      this.send(pClientIP, pClientPort, "Angemeldet.");
    }

    public void processMessage(String pClientIP, int pClientPort, String pMessage) {
      if (pMessage.equals(ENDE)) {
        this.closeConnection(pClientIP, pClientPort);
      }
      else {
        this.send(pClientIP, pClientPort, this.doppler.verdoppeln(pMessage));
      }
      
      if else(pMessage.startsWith("Set")) {
          String snummer = pMessage.substring(4);
          int nummer = Integer.parseInt(snummer);
          brett.set(nummer);
          String nachricht = "OK gesetzt an " + snummer + ".";
          this.send(pClientIP, pClientPort, nachricht);
        } 
      
    }
    
    public void processClosedConnection(String pClientIP, int pClientPort) {
      this.send(pClientIP, pClientPort, pClientIP + " " + pClientPort +
      " Danke fuer die Teilnahme an unserem Doppeler.");
      this.send(pClientIP, pClientPort, ENDE);
    }
}
```

Also nochmals die Bitte, helft uns damit wir mit einem :autsch:davon kommen.
Danke schonmal im Vorraus :toll:

Unser Infolehrer hat uns irwie folgendes vorgeschlagen,
wobei dies bei der methode processmessage:

```
else if (pMessage.startsWith("Set")) {
          String snummer = pMessage.substring(4);
          int nummer = Integer.parseInt(snummer);
          brett.set(nummer);
          String nachricht = "OK gesetzt an " + snummer + ".";
          this.send(pClientIP, pClientPort, nachricht);
        }
```


----------



## Andi_CH (29. Mrz 2011)

Also ich habe eine konkrete Frage - was funktioniert denn noch nicht?

Wenn der Server für Zahlenverdoppeln wirklich funktioniert hat müsst er jetzt doch auch tun.


--
Nebensache aber immerhin - voraus - weil vorraus ist voll der Graus


----------



## BlueJ_Noob (29. Mrz 2011)

Rede nicht so viel drum rum! Ich will jetzt die Lösung!

Echt ey - typisch Andy!:applaus:


----------



## Gonzo17 (29. Mrz 2011)

BlueJ_Noob hat gesagt.:


> Rede nicht so viel drum rum! Ich will jetzt die Lösung!
> 
> Echt ey - typisch Andy!:applaus:



???:L  :noe:

Und du meinst so wirst du einfach so ne Lösung kriegen?


----------



## Firephoenix (29. Mrz 2011)

Hi,
bevor man das TicTacToe auf Netzwerk-Kommunikation umschreibt sollte es erstmal selber optimiert werden. Die Methode Siegescheck z.b. ist ein Fall für den Verbesserungshammer.
Außerdem sollten die Java-Konventionen bei den Namen eingehalten werden.
Link dazu: Java Coding Conventions, Best Practices Recommendations

Und BlueJ_Noob, einfach eine Lösung wirst du hier nicht kriegen,
ich für meinen Teil helfe gerne bei Hausaufgaben, aber ich glaube du wirst hier keinen Samariter finden der dir die fertige Lösung hinklatscht nach dem Motto: "Hier, kannste copy-paste übernehmen, da du meinen Code eh nicht verstehst kommst du bei der nächsten Hausaufgabe wieder und ich mach dir das dann schon...", davon hat keiner was.
Lieber eigene Ansätze vorstellen und sich hier Verbesserungsvorschläge und Erklärunen abholen, dadurch lernt man wesentlich schneller und kann später schwerere Aufgaben besser bearbeiten.
Gruß


----------



## Andi_CH (29. Mrz 2011)

BlueJ_Noob hat gesagt.:


> Echt ey - typisch Andy!:applaus:



Solche Thematiken verfolge ich, weil sie mich wirklich interessieren, aber wenn ich nicht mal das Problem sehe wird es schwierig ;-) Meine Frage war also wirklich ernst gemeint oder siehst du das Problem?

Lieber TO poste doch den Client auch noch, dann kann ich ein wenig damit rumspielen und konstruktiv was äussern - ohne das bleibt mir nichts anderes übrig als meinem Ruf gerecht zu werden


----------



## BlueJ_Noob (30. Mrz 2011)

So tut mir leid für meinen einen beitrag, der war nicht ernst gemeint, hat nen kumpel von mir gepostet ...
inzwischen hat sich mein problem gelöst, hab es hinbekommen, aber habe nun ein neues.
Erstmal der Code vom Server und vom Client:

```
import java.util.Random;
/**
 * 
 */
public class BrettspielServer extends Server {

    final String ENDE = "*bye*";
    private Brett b;
    private String Spieler;
    private int zähler;
    private Random r;
    private boolean vorbei;

    /**
     * 
     */
    public BrettspielServer() {
      super(2000);   // Das ist der Port, auf dem der Server läuft!
      this.b = new Brett();
      Random r = new Random();
      this.zähler = 1+r.nextInt(2);
      this.vorbei = false;
    }

    /**
     * 
     */
    public void processNewConnection(String pClientIP, int pClientPort) {
      this.send(pClientIP, pClientPort, "Willkommen " + pClientIP + " auf Port "
        + pClientPort + " bei unserem TicTacToe-Spiel!");
      this.send(pClientIP, pClientPort, "Protokoll-Befehle für das Spielen sind: CSS1, CSS2, CSGF, CSSS, CSRS."); 
      this.send(pClientIP, pClientPort, "CSS1: Spieler 1 kann ein Feld setzen, dieses wird im Bereich 0 - 8 angegeben.");
      this.send(pClientIP, pClientPort, "CSS2: Spieler 2 kann ein Feld setzen, dieses wird im Bereich 0 - 8 angegeben.");
      this.send(pClientIP, pClientPort, "CSGF: Man gibt die Nr eines Feldes an, um zu erfahren ob es belegt ist oder nicht.");
      this.send(pClientIP, pClientPort, "CSSS: Zeigt den Status des Spiels an.");
      this.send(pClientIP, pClientPort, "CSRS: Startet das Spiel neu.");
      this.send(pClientIP, pClientPort, "Angemeldet.");
      this.send(pClientIP, pClientPort, "Zunächst wird zufällig bestimmt wer anfängt.");
      this.send(pClientIP, pClientPort, "Spieler " + zähler + " fängt an.");
      this.send(pClientIP, pClientPort, "");
      
      
    }

    /**
     * 
     */
    public void processMessage(String pClientIP, int pClientPort, String pMessage) {
      if (pMessage.equals(ENDE)) {
        this.closeConnection(pClientIP, pClientPort);
      }
      
      // Reaktion des Servers, wenn Spieler 1 auf ein Feld setzten will.
      // index: Feldnummer (0-8) 
      else if(pMessage.startsWith("CSS1")) {
        if(zähler == 1 || zähler == 3 || zähler == 5 || zähler == 7 || zähler == 9 && !vorbei){
          String snummer = pMessage.substring(4);
          int index = Integer.parseInt(snummer);
          this.b.set(index,1);
          zähler++;
          if(b.error1){
              this.send(pClientIP, pClientPort, "Fehler: Feld " + snummer + " ist schon belegt!");
              zähler--;
            }
          else if(this.b.error2){
              this.send(pClientIP, pClientPort, "Fehler: Das Spiel ist bereits vorbei! Wenn sie nochmal spielen möchten, starten sie ein neues Spiel.");
              zähler--;
            }
          // Anmerkung: Server stürzt bei Fehler 3 ab, Verbindung wird sofort unterbrochen.  
          else if(this.b.error3){ 
              this.send(pClientIP, pClientPort, "Fehler: Feld nicht definiert! Geben sie bitte nur Feldernummern an, die definiert sind (0 - 8).");
              zähler--;
            }
          else if(this.b.Sieg){
              this.send(pClientIP, pClientPort, "Das Spiel ist vorbei, Spieler 1 gewinnt!");
              this.Spieler = "Spieler1";
              this.vorbei = true;
              zähler--;
            }
          else if(this.b.unentschieden){
              this.send(pClientIP, pClientPort, "Das Spiel ist vorbei, es geht unentschieden aus!.");
              this.vorbei = true;
              zähler--;
            }
            else {
          String nachricht = "Spieler 1 setzt in das Feld " + snummer + ".";
          this.send(pClientIP, pClientPort, nachricht);
          this.send(pClientIP, pClientPort, "Spieler 2 ist an der Reihe.");
        }
        }
        else if(!vorbei){
          this.send(pClientIP, pClientPort, "Fehler: Spieler 2 ist an der Reihe.");      
        }
        else if(vorbei){
          this.send(pClientIP, pClientPort, "Fehler: Das Spiel ist bereits vorbei! Wenn sie nochmal spielen möchten, starten sie ein neues Spiel.");      
        }
      }
      
      // Reaktion des Servers, wenn Spieler 2 auf ein Feld setzen will.
      // index: Feldnummer (0-8) 
      else if(pMessage.startsWith("CSS2")) {
        if(zähler == 2 || zähler == 4 || zähler == 6 || zähler == 8 || zähler == 10 && !vorbei){      
          String snummer = pMessage.substring(4);
          int index = Integer.parseInt(snummer);
          this.b.set(index,2);
          zähler++;
          if(this.b.error1){
              this.send(pClientIP, pClientPort, "Fehler: Feld " + snummer + " ist schon belegt!");
              zähler--;
            }
          else if(this.b.error2){
              this.send(pClientIP, pClientPort, "Fehler: Das Spiel ist bereits vorbei! Wenn sie nochmal spielen möchten, starten sie ein neues Spiel.");
              zähler--;
            }
          // Anmerkung: Server stürzt bei Fehler 3 ab, Verbindung wird sofort unterbrochen.  
          else if(this.b.error3){
              this.send(pClientIP, pClientPort, "Fehler: Feld nicht definiert! Geben sie bitte nur Feldernummern an, die definiert sind (0 - 8).");
              zähler--;
            }
          else if(this.b.Sieg){
              this.send(pClientIP, pClientPort, "Das Spiel ist vorbei, Spieler 2 gewinnt!");
              this.Spieler = "Spieler2";
              this.vorbei = true;
              zähler--;
            }
          else if(this.b.unentschieden){
              this.send(pClientIP, pClientPort, "Das Spiel ist vorbei, es geht unentschieden aus!.");
              this.vorbei = true;
              zähler--;
            }
          else {  
          String nachricht = "Spieler 2 setzt in das Feld " + snummer + ".";
          this.send(pClientIP, pClientPort, nachricht);
          this.send(pClientIP, pClientPort, "Spieler 1 ist an der Reihe.");
        }
        }
        else if(!vorbei){
          this.send(pClientIP, pClientPort, "Fehler: Spieler 1 ist an der Reihe.");      
        }
        else if(vorbei){
          this.send(pClientIP, pClientPort, "Fehler: Das Spiel ist bereits vorbei! Wenn sie nochmal spielen möchten, starten sie ein neues Spiel.");      
        }
    }
      
       // Reaktion des Servers, wenn der Spieler wissen will ob ein Feld frei ist.
      else if(pMessage.startsWith("CSGF")){
          if(this.b.error3){
              this.send(pClientIP, pClientPort, "Fehler 3: Feld nicht definiert! Geben sie bitte nur Feldernummern an, die definiert sind (0 - 8).");
            }
         String snummer = pMessage.substring(4);
         int index = Integer.parseInt(snummer);
         String nachricht = "Das Feld " + index + " besitzt den inhalt " + b.getInhalt(index) + ".";    
         this.send(pClientIP, pClientPort, nachricht);
        }
        
      // Reaktion des Servers, wenn der Spieler wissen will ob das Spiel vorbei ist.
      else if(pMessage.startsWith("CSSS")){
         String snummer = pMessage.substring(4);
         if (this.b.Sieg){
         String nachricht = "Das Spiel ist bereits vorbei, " + this.Spieler + " hat gewonnen.";     
         this.send(pClientIP, pClientPort, nachricht);
         }        
        else if(this.b.unentschieden){
         String nachricht = "Das Spiel ist bereits vorbei, es ist unentschieden ausgegangen.";      
         this.send(pClientIP, pClientPort, nachricht); 
         }
        else {
         String nachricht = "Das Spiel läuft noch.";      
         this.send(pClientIP, pClientPort, nachricht);   
         }
        }
        
      // Reaktion des Servers, wenn das Spiel neugestartet werden soll.
      else if(pMessage.startsWith("CSRS")){
         String snummer = pMessage.substring(4);
         this.b.reset();
         this.vorbei = false;
         String nachricht = "Das Spiel wurde neugestartet.";
         this.send(pClientIP, pClientPort, nachricht);
         this.send(pClientIP, pClientPort, "Erneut wird zufällig bestimmt wer anfängt.");
         Random r = new Random();
         zähler = 1+r.nextInt(2);
         this.send(pClientIP, pClientPort, "Spieler " +zähler+ " fängt an.");
         this.send(pClientIP, pClientPort, "");
        }
        
      // Reaktion des Servers auf ein ungültiges Protokoll.
      // Anmerkung: Vergisst man den Parameter, so stürzt das Programm ab.
      else if(pMessage != ("CSS1") && pMessage != ("CSS2") && pMessage != ("CSGF") && pMessage != ("CSSS") && pMessage != ("CSRS")) {
         String nachricht = "Fehler: Ungültiges Protokoll! Bitte geben sie nur Befehle aus dem Protokoll an.";
         this.send(pClientIP, pClientPort, nachricht);
        }
        
        
    }
    
    /**
     * 
     */
    public void processClosedConnection(String pClientIP, int pClientPort) {
      this.send(pClientIP, pClientPort, pClientIP + " " + pClientPort +
      "Danke für die Teilnahme an unserem TicTacToe-Spiel.");
      this.send(pClientIP, pClientPort, ENDE);
    }

}
```

Für den Client

```
import javax.swing.*;

public class GeneralClient extends Client {

  final String ENDE = "*bye*";
  JTextArea textbereich;
  
  public GeneralClient(String serverIP, JTextArea pTextbereich){
    super(serverIP, 2000);
    textbereich=pTextbereich;
  }
  
  public void processMessage(String pMessage){
     if (this.istVerbunden())
       if (pMessage.equals(ENDE))
         this.close();
       else 
         textbereich.setText(textbereich.getText() + "\n" + pMessage);
  }
  
  public void disconnect() {
    this.send(ENDE);
  }
}
```

der ist mit folgender gui verknüpft:

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

/**
  *
  * Beschreibung
  *
  * @version 1.0 vom 22.11.2010
  * @author KBOVI
  */

public class GeneralClientGUI extends JFrame {
  // Anfang Variablen

  // Anfang Attribute
  final String ENDE="*bye*";
  private GeneralClient hatGeneralClient;
  private JLabel jLabel1 = new JLabel();
  private JTextField jTextField1 = new JTextField();
  private JButton jButton1 = new JButton();
  private JButton jButton2 = new JButton();
  private JScrollPane jScrollPanejTextArea1 = new JScrollPane();
  private JTextArea jTextArea1 = new JTextArea("");
  private JLabel jLabel2 = new JLabel();
  private JTextField jTextField2 = new JTextField();
  private JButton jButton3 = new JButton();
  // Ende Attribute

  // Ende Variablen

  public GeneralClientGUI(String title) {
    // Frame-Initialisierung
    super(title);
    addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent evt) { System.exit(0); }
    });
    int frameWidth = 514;
    int frameHeight = 373;
    setSize(frameWidth, frameHeight);
    Container cp = getContentPane();
    cp.setLayout(null);
    // Anfang Komponenten

    jLabel1.setBounds(16, 16, 40, 16);
    jLabel1.setText("Server");
    jLabel1.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
    cp.add(jLabel1);
    jTextField1.setBounds(64, 16, 121, 24);
    jTextField1.setText("");
    cp.add(jTextField1);
    jButton1.setBounds(200, 16, 110, 24);
    jButton1.setText("Anmelden");
    cp.add(jButton1);
    jButton1.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        jButton1ActionPerformed(evt);
      }
    });

    jButton2.setBounds(328, 16, 110, 24);
    jButton2.setText("Beenden");
    cp.add(jButton2);
    jButton2.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        jButton2ActionPerformed(evt);
      }
    });

    jScrollPanejTextArea1.setBounds(8, 48, 438, 241);
    jTextArea1.setText("");
    jScrollPanejTextArea1.setViewportView(jTextArea1);
    cp.add(jScrollPanejTextArea1);
    jLabel2.setBounds(8, 304, 56, 16);
    jLabel2.setText("Nachricht");
    jLabel2.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
    cp.add(jLabel2);
    jTextField2.setBounds(72, 304, 249, 24);
    jTextField2.setText("");
    cp.add(jTextField2);
    jButton3.setBounds(328, 304, 110, 25);
    jButton3.setText("Abschicken");
    cp.add(jButton3);

    jButton3.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        jButton3ActionPerformed(evt);
      }
    });

    // Ende Komponenten

    setResizable(false);
    setVisible(true);
  }

  // Anfang Methoden

  // Anfang Ereignisprozeduren
  public void jButton1ActionPerformed(ActionEvent evt) {
    String lServerIP=jTextField1.getText();
    if (lServerIP.length()>0) {
       hatGeneralClient=new GeneralClient(lServerIP, jTextArea1);
    }
  }

  public void jButton2ActionPerformed(ActionEvent evt) {
     hatGeneralClient.close();
  }

  public void jButton3ActionPerformed(ActionEvent evt) {
    String lNachricht=jTextField2.getText();
    if (lNachricht.length()>0) {
      hatGeneralClient.send(lNachricht);
    }
  }

  // Ende Ereignisprozeduren

  public static void main(String[] args) {
    new GeneralClientGUI("Allgemeiner Client");
  }
  // Ende Methoden
}
```

So nun ergibt sich folgendes Problem:
Wenn man zwei General Clients benutzt, bekommt nur immer der eine Antwort vom Server,
der auch eine Nachricht schickt. Wir sollen es aber so machen, das beide Clients benachrichtigt werden. Also wenn beispielsweise der erste Spieler eine Naricht verschickt an den Server mit
dem Inhalt wo er ein Feld setzt, das auch der zweite Spieler dann im Client benachrichtigt
werden soll, wo Spieler 1 ein Feld gesetzt hat und nicht nur der erste.
Ich hoffe das Problem ist verständlich, in diesem Sinne schonmal jetzt Danke im Vorraus


----------



## BlueJ_Noob (4. Apr 2011)

weiß denn niemand rat,
wie man mit zwei ips arbeiten könnte?
morgen müssen wir vorstellen ,
ich nehme jede hilfe an die ich kriegen kann,
danke im vorraus


----------

