Tags über Netzwerk?



  • hehe :p

    hab aber ein 8 x 8 großes Feld und man muss eine angabe der Sieglänge machen, also 3 bis 8 Steine hintereinander 🙂



  • Ok nehme alles zurück. Dann auf alle Fälle Arrays!

    Ich würde mir ein Array anlegen, in dem die Positionen der acht Felder gespeichert werden.

    Wenn Dein Prog etwas empfängt, gleicht es die übertragene Position ab und erstellt an dieser in dem Poitionsarray gespeicherten Koordinate ein dynamisches Image.

    Z.B.

    PositionArray[1][1] = "1|1";
    PositionArray[2][1] = "21|1";
    PositionArray[3][1] = "41|1";

    Oder nehm zwei Integerarrays, dann brauchst Du denn String nicht nochmal parsen.

    Ganz allgemein muss ich sagen, dass die Übertragung meiner Meinung nach nicht wirklich schwer ist, die Siegesauswertung würde mir Kopfzerbrechen bereiten.



  • Rostfrei[] schrieb:

    Ok nehme alles zurück. Dann auf alle Fälle Arrays!

    Ich würde mir ein Array anlegen, in dem die Positionen der acht Felder gespeichert werden.

    Dafür hab ich ja die Tags.
    Ich hab mir gedacht, ich speicher die Tags von Client1 in einer Variablen vom Client2.

    Wenn Dein Prog etwas empfängt, gleicht es die übertragene Position ab und erstellt an dieser in dem Poitionsarray gespeicherten Koordinate ein dynamisches Image.

    Z.B.

    PositionArray[1][1] = "1|1";
    PositionArray[2][1] = "21|1";
    PositionArray[3][1] = "41|1";

    Oder nehm zwei Integerarrays, dann brauchst Du denn String nicht nochmal parsen.

    Ganz allgemein muss ich sagen, dass die Übertragung meiner Meinung nach nicht wirklich schwer ist, die Siegesauswertung würde mir Kopfzerbrechen bereiten.



  • ich kann bei einem Spielzug die Tags zum Sender schicken. Ich muss die Tags nur zum zeiten Client schicken. Jemand ne idee?



  • Und jetzt ganz konkret: Was funktioniert ncht?



  • siehe post über dir 🙂



  • Zwei Clients?
    Ich dachte, dass das Spiel nur für zwei Spieler ist?

    Oder Du hast was falsch verstanden(oder ich...)

    Du musst einen Client und einen Server haben. Ein Server MUSS da sein. Clients können beliebig viele vorhanden sein.



  • Also ein Client soll einen Spieler darstellen. ergo habe ich 2 Clients 😉 🙂



  • Ich hoffe einfach mal, dass wir vom selben reden und Du einen Server und einen Client hast.

    Client:

    ClientSocket1->Socket->SendText(Tag);
    

    Server

    ServerSocket1->Socket[0]->SendText(Tag);
    // oder mit ActiveConnections
    
    int Verbindungen = ServerSocket1->Socket->ActiveConnections;
    for(int x = 0; x <= Verbindungen - 1; x++)
      ServerSocket1->Socket->Connections[x]->SendText(Tag);
    


  • einen Server habe ich. Und durch diesen Server will ich 2 CLients miteinander "verbinden", um gegeneinander zu spielen. 🙂

    ClientSocket1->Socket->SendText(Tag);
    

    Hier sendet also ein Client die Tags von den Buttons an den Server.
    funzt wunderbar.

    Wie kann aber ein weiterer Client diese Tags verwenden? Das ist nämlich mein aktuelles Problem.

    noch ein kleines Problemchen: wenn ich 2 Clients habe, wie kann der Server diese unterscheiden?



  • Unterscheiden kann er diese anhand der Socket Nummer.



  • Sorry, dass ich nochmals frage, aber wofür brauchst Du bei zwei Spielern einen Server und zwei Clients? Ich glaube Du verstehst da etwas falsch.

    int Verbindungen = ServerSocket1->Socket->ActiveConnections;
    for(int x = 0; x <= Verbindungen - 1; x++)
      ServerSocket1->Socket->Connections[x]->SendText(Tag);
    


  • http://home.arcor.de/apf3lsaft/TicTacToe.rar

    hier siehst du, wie ich es aufgebaut habe.
    Ich will also auf einer Oberfläche folgendes haben:
    - das Spiel, - einen Client, - einen Server.

    Jetzt soll auf einem anderen Pc im Netzwerk genau die selbe Oberfläche dargestellt sein.
    Die zwei Spieler sprechen sich ab und Spieler 1 aktiviert einen Server.
    Spieler 1 und Spieler 2 connecten (siehe Client- Groupbox) auf den Server.
    Spieler 1 (oder 2, egal) macht den ersten SPielzug, der dann auch beim anderen Spieler angezeigt wird usw.

    ich hoffe, dass es etwas klarer ist

    🙂 🙂



  • Du solltest Dir glaube ich mal ein Tutorial oder die Hilfe durchlesen!

    In Deinem Fall hast Du zwei Server und zwei Clients. Auf jeder Form also ein Paar!

    Wenn ein Spieler einen Server öffnet, braucht er sich doch nicht mehr mit seinem lokalen Client an den Server connecten. Wofür denn auch? Arbeite doch direkt mit der Client-Server-Kommunikation und nicht über den Umweg, dass der Client Daten an den Server schickt, welcher diese Daten weiter an den anderen Client schickt.



  • Rostfrei[] schrieb:

    Du solltest Dir glaube ich mal ein Tutorial oder die Hilfe durchlesen!

    In Deinem Fall hast Du zwei Server und zwei Clients. Auf jeder Form also ein Paar!

    genau. deshalb müssen sich die Spieler vorher absprechen ^^

    Wenn ein Spieler einen Server öffnet, braucht er sich doch nicht mehr mit seinem lokalen Client an den Server connecten. Wofür denn auch? Arbeite doch direkt mit der Client-Server-Kommunikation und nicht über den Umweg, dass der Client Daten an den Server schickt, welcher diese Daten weiter an den anderen Client schickt.

    verstehe ich nicht, sorry.
    bin erst seit n paar Tagen mit netzwerkprogrammieren beschäftigt 😋 🙂



  • Ok, ich werde versuchen Dir das auf die Schnelle mal zu erklären.

    Als Beispiel:

    Du hast Deine Form. Darauf setzt Du einen Serversocket und einen Clientsocket. Du gibst den Server den Port 1999.

    Wenn Du das Programm startest, kannst Du den Server des einen Spielers, der der Server sein möchte mit Open() starten. Somit ist jetzt ein Server gestartet! Der andere Spieler startet seinen Server nicht (da auf dem selben Port immer nur ein Server aktiv sein kann), sondern verbindet sich mit seinem Client über die IPAdresse und den Port 1999 zu Spielers1' Server.

    D.H.: Auf dem einen Rechner läuft ein Server(Spieler 1) und auf dem anderen Rechner hat sich ein Client(Spieler 2) zu dem Server verbunden.
    Jetzt kann der Client Daten an den Server schicken. Der Server kann aber auch Daten an den Client schicken.

    Client sendet:

    ClientSocket1->SendText(Tag);
    

    Server sendet:

    ServerSocket1->Socket[0]->SendText(Tag);
    // Socket [0] deswegen, da nur ein Client vorhanden
    

    Server liest aus der Verbindung mit TForm1::ServerSocket1ClientRead

    Client liest aus der Verbindung mit TForm1::ClientSocket1Read

    Dieser Sachverhalt ist sehr verständlich in dem Chatbeispielprogramm beschrieben.



  • also im Prinzip hab ich das verstanden.
    Nur habe ich hier keinen Serverclient.

    es ist im Prinzip wie ICQ.
    ausser das vorher von eine Person ein Server aktiviert werden muss.
    Dann starten beide Personen jeweils einen Client.

    //ich bin schlecht im erklären, ich weiss 😞

    einer von uns ist grad voll auf dem Schlauch, und ich denke dass ich es bin 🙄 😃



  • Dann mach es halt auf diesen umständlichen Wege.

    Du musst also Daten von dem Client an den Server schicken, damit dieser diese Daten an den anderen Client weiterschickt.

    Ok, wo ist da jetzt das Problem? Du schickt vom Client mit SendText die Daten.
    Der Server sendet die Daten mit Hilfe von ActiveConnections (siehe vorherige Posts) an alle anderen Clients.

    In diesen Fall musst Du aber Deine Tags so umbauen, dass er die IPAdressen enthält (oder halt etwas anderes eindeutiges z.B. MACAdresse), da der Client, der die Daten verschickt, diese Daten wieder zurückbekommt (da Server an alle Clients sendet!). In Deinem Programm musst Du nun noch die IPAdresse der Tags prüfen, damit das Prog nicht seine selbst versendeten Daten (die eigentlich für den anderen Spieler vorgesehen waren) verarbeitet.
    Ich weiß, dass das sehr kompliziert klingt, aber Du wolltest es ja auf die Tour.

    Ich empfehle trotzdem ein Tutorial oder das BCB-Beispiel aus meinem vorherigen Post. Lese es Dir einfach mal durch. Alle Fragen aus diesem Thread hätten damit beantwortet werden können!



  • umständlich? hmm

    also du sagst es so:
    Spieler 2 aktiviert einen Server
    Spieler 1 connectet als Client1

    oder?

    hm, jetzt seh ichs auch 😉 😃 🙂

    Dann funzt folgende Zeile aber nicht. Zumindest als Spieler 2, der ja den Server aktiviert hat.

    ClientSocket->Socket->SendText(tag);
    


  • Nein kann ja auch nicht!

    Schau in den von mir geposteten Code

    ClientSocket1->SendText(Tag);
    

    Socket ist nur bei dem Server!!!


Anmelden zum Antworten