Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Array Über TSocket senden (https://www.delphipraxis.net/136369-array-ueber-tsocket-senden.html)

bl4ckb1rd 29. Jun 2009 12:00


Array Über TSocket senden
 
Ich möchte ein Online Schiffe versenken machen.

Nun muss ich (der server) die Positionen der gegnerischen Schiffe übergeben:

Delphi-Quellcode:
if online_server >= 1 then begin
  feld_a := 1;  // server wartet nur noch auf denclient
  for I := 1 to 10 do begin
    for J := 1 to 10 do begin
      Nachricht.feld[I,J] := mein_feld[I,J];    //ints
    end;
  end;
  for I := 1 to 5 do begin
    for J := 1 to 5 do begin
      Nachricht.schiffe[I,J] := meine_schiffe[I,J];    //ints
    end;
  end;
  for I := 1 to 5 do begin
      Nachricht.namen_schiffe[I] := schiffs_namen[I];      //strings
  end;
  Nachricht.aktion := 'server_feld';

  with Server.Socket do begin
         for I := 0 to ActiveConnections-1 do
            Connections[I].SendBuf (Nachricht, SizeOf(Nachricht))
      end; {with}
end;
So sieht der Record Nachricht aus:

Delphi-Quellcode:
type TChatNachricht = Record
    chat : string[255];
      name : string[255];
      aktion : string[255];
    feld : array[1..10,1..10] of integer;
    schiffe : array[1..5,1..5] of integer;
    namen_schiffe : Array[1..5] of string;
    spiel_status : integer;
      schuss_x, schuss_y, treffer : integer;      //schuss_x/schuss_y enthaelt entweder dein schuss koordinaten oder die vom gegner. Treffer enthaelt entweder 3 - wasser getroffen oder 4 - schiff getroffen
end;

Hier empfängt der client die Daten:

Delphi-Quellcode:
if Nachricht.aktion = 'server_feld' then begin
    for I := 1 to 10 do begin
      for J := 1 to 10 do begin
        gegner_feld[I,J] := Nachricht.feld[I,J];
      end;
    end;
    for I := 1 to 10 do begin
      for J := 1 to 10 do begin
        gegner_schiffe[I,J] := Nachricht.schiffe[I,J];
      end;
    end;
    for I := 1 to 5 do begin
      schiffs_namen_KI[I] := Nachricht.namen_schiffe[I];
    end;
    feld_a := 1; //server ist fertig mit dem setzen, es wird auf den client gewartet
  end;
Nach dem senden, stürtzt der Client mit folgender Fehlermeldung ab: Ungültige Zeigeroperation

Darf man überhaupt so arrays so versenden?


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:06 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz