Netzwerk: Localhost VS Lan

oska

Mitglied
Ich hab ein Netzwerkspiel (Halma) programmiert, das über Localhost gut läuft.
Im echten Lan gehen allerdings Informationen (senden der Namen: letzter Name fehlt) verloren.
Hat jemand einen Tip dazu?

THX
 
Deine Informationsfülle ist ja überragend die du uns da presentierst ;)

Na dann muss ich mich mal auf die Suche nach meiner Glaskugel machen
 
Hast wohl recht. :-( Also ich versuch mal das ganze etwas zu beschreiben.
Es sollen, je nach Spieleranzahl, bis zu 6 Namen über das Netzwerk gesendet werden. Auf der Serverseite läuft das wie folgt ab:
Code:
public void sendeNamen(String[] spielername)
{
            try
            {
                       out.println("empfangeNamenListe");
                       for(int i=0; i<anzahl;i++)
                       {
                                  out.println(spielername[i]);
                       }
            }
            catch(Exception e)
            {
                      System.out.println("Konnte Liste nicht senden!");
            }		
}

Der Client empfängt das so:

public void empfangeNamen()
{
                  for(int i=0;i<anzahl;i++)
                  {
                                try
                                {
                                              name[i]=in.readLine();
                                }
                                catch(Exception e)
                                {
                                               System.out.println("Fehler: " + e.toString());
                                }
                  }
                  hatNamen=true;

Über localhost funktioniert das perfekt. Wenn ich das ganze allerdings über Lan laufen lasse, dann fehlt jedesmal der letzte Name beim Client.
Das merkwürdige hierbei ist aber auch, dass es manchmal doch klappt (mit zwei Laptops) und dann wieder nicht.

Kann man das vieleicht mit irgendewelchen Methoden wie wait(), ready() oder synchronized Methoden lösen?
Über wait() und ready() habe ich in der JavaInsel oder im Handbuch der Java-Programmierung leider nichts gefunden. Die hab ich aus dem Beispielquelltext von unserem Prof, weiß aber nicht genau wie sie funktionieren.

THX schon mal
 
Zuletzt bearbeitet:
Achso, ui ist das kompliziert heute. Ich benutze die ganz normalen TCP Sockets von Java. Hier beim Server:

while(anz<(spielerAnzahl-1))
{
Socket socket = sock.accept();

// einzelne Verbindungen werden in Threads aufgeteilt
ClientThread c = new ClientThread(anz, socket, matrix, spielerAnzahl,
SERVERNAME);
clientThread[anz]=c;
clientThread[anz].start();
System.out.println("Verbindung akzeptiert! ");

clientThread[anz].sendeClientID();


anz++;
} // Erzeugung von bis zu 5 Sockets beendet




Hier beim Client:

public void startClient(String ip, int PORT) throws IOException
{
// Methode startClient mit IP und PORT aufgerufen

System.out.println("Versuche mit Server zu verbinden...");
try
{
InetAddress addr = InetAddress.getByName(ip);
// neuer Socket erzeugt
socket = new Socket(addr, PORT);
// Objekt in bekommt InputStreamReader
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
// Objekt out bekommt OutputStreamWriter
out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);

// Statusmeldungen für internen Ablauf
System.out.println("Verbindung zum Server aufgebaut!");
System.out.println("Server IP: "+ ip);
System.out.println("Port: "+ PORT);


} // Ende try


Hoffe das hilft.
 
Ok. habs gelöst bekommen. Der Client hat in einigen Fällen versucht, die Daten ganz einfach schneller einzulesen, als der Server sie liefert. Über Localhost entsteht das Problem nicht.

Code:
public void empfangeNamen()
{
for(int i=0;i<anzahl;i++)
{
try
{
name[i]=in.readLine();
Thread.sleep(200);                <----------------------Problem gelöst
}
catch(Exception e)
{
System.out.println("Fehler: " + e.toString());
}
}
hatNamen=true;

Danke, dass du versucht hast zu helfen. Bis zum nächsten Mal
;)
 

Neue Beiträge

Zurück