Thorsten F.: Java-Spiel im Netzwerk

Hi,

ich habe ein kleines 2-Personen-Spiel (4-Gewinnt) programmiert, welches auch wunderbar funkioniert. Jetzt möchte ich dieses netzwerkfähig machen.
Zum Testen habe ich hier natürlich auch 2-Rechner stehen.
Wenn ich jetzt auf dem Server auf ein Feld klicke, dann sendet dieser die Koordinaten des Feldes an den Client mit folgender Funktion:

public void sendToClient(int x, int y)
 {
  int zeilenPos = x;
  int spaltenPos = y;
  String data = ""+zeilenPos+""+spaltenPos;
  try
  {
          ServerSocket srvr = new ServerSocket(1234);
       Socket skt = srvr.accept();
       System.out.print("Server has connected!\n");
          PrintWriter out = new PrintWriter(skt.getOutputStream(), true);
          out.print(data);
          out.close();
          skt.close();
          srvr.close();
  }
  catch(Exception e)
  {
   System.out.print("Serverstart fehlgeschlagen");
  }
    }

Diese rufe ich natürlich in dem MouseListener bei mousePressed auf.

Wenn ich auf dem Client das Spiel starte, dann startet dieser einen Thread, der jede Sekunde abfragt, ob er vom Server etwas bekommt mit Hilfe dieser Funktion:

public void getKoordFromSever()
{
     try
     {
      Socket skt = new Socket("localhost", 1234);
      BufferedReader in = new BufferedReader(new InputStreamReader(skt.getInputStream()));
      while (!in.ready()) {}
      setStoneFromServer(in.readLine()s);
      in.close();
     }
     catch(Exception e)
     {
      System.out.print("FEHLER im Client");
     }
}

Wenn ich nun auf dem Server auf ein Feld klicke, dann wird dieses Feld rot und auf dem Client wird genau dieses Feld auch rot, denn das soll ja auch so.
Jetzt stehe ich allerdings vor dem Problem, wie ich das auch vom Client aus machen kann, denn es soll ja auch andersrum funktionieren.
Wenn man nun im Client auf ein Feld klickt, dann soll dieser die Koordinaten des Feldes an den Server senden.

Die Frage ist nun, wie ich das realisieren kann. Muss ich auf dem Server jetzt auch einen Thread starten, der in einem bestimmten Intervall den Client abfragen muss?
Wäre nett, wenn jemand etwas dazu sagen kann oder mir auch einen Rat/Hinweis geben kann, wie man das realisieren kann.

PS: Ich habe schon versucht dieses Problem innerhalb der sendToClient() zu lösen, allerdings wird diese Funktion ja nur aufgerufen, wenn man auf dem Server auf ein Feld klickt.

Gruß,
Thorsten F.

  1. Hallo Thorsten,

    public void getKoordFromSever()
    {
         try
         {
          Socket skt = new Socket("localhost", 1234);
          BufferedReader in = new BufferedReader(new InputStreamReader(skt.getInputStream()));
          while (!in.ready()) {}
          setStoneFromServer(in.readLine()s);
          in.close();
         }
         catch(Exception e)
         {
          System.out.print("FEHLER im Client");
         }
    }

    Wenn ich nun auf dem Server auf ein Feld klicke, dann wird dieses Feld rot und auf dem Client wird genau dieses Feld auch rot, denn das soll ja auch so.
    Jetzt stehe ich allerdings vor dem Problem, wie ich das auch vom Client aus machen kann, denn es soll ja auch andersrum funktionieren.

    Suchst du Socket.getOutputStream()?
    Mehr dazu beispielsweise bei Java Almanac.

    Grüße

    Marc Reichelt || http://www.marcreichelt.de/

    --
    Linux is like a wigwam - no windows, no gates and an Apache inside!
    Selfcode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)
    1. Hi,

      danke für die Antwort. Allerdings ist mir die Lösung oder eher der Lösungsweg eingefallen, kurz nachdem ich meinen Beitrag gesendet habe und ihn nochmal kurz überflogen habe.

      Gruß,
      Thorsten F.