AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Übertragungsfehler eines Strings (?)
Thema durchsuchen
Ansicht
Themen-Optionen

Übertragungsfehler eines Strings (?)

Ein Thema von Bloodfire · begonnen am 18. Dez 2005 · letzter Beitrag vom 18. Dez 2005
 
Bloodfire

Registriert seit: 17. Jun 2004
38 Beiträge
 
#1

Übertragungsfehler eines Strings (?)

  Alt 18. Dez 2005, 13:27
noch immer gleiches Projekt (LAN-Schach), aber andere Stelle:

Ich überprüfe nach jedem Schachzug, auf Bedrohung (CheckSign = '+'), auf Matt (CheckSign = '#') und auf Patt (CheckSign = 'XX'). Bei einem 'normalen' Zug (also ohne den vorherigen Situationen) ist CheckSign = ''.

Bei dem, der gerade gezogen hat und wo das ganze gleich überprüft wird, funktioniert das ganze wunderbar. Aber sobald bei dem Empfänger das empfangene Checksign > '' ist, kommt eine Zugriffsverletzung.


Hier werden die Daten versandt:

Delphi-Quellcode:
procedure TBoardForm.SendGameFiles(FSrc, FDest: TPoint; FNewFig: String);
var
  AFiles: RSendFiles;
begin
   AFiles.DoEnPassant:=DoEnPassant;
   AFiles.EnPassant:=IsEPPossible(FSrc,FDest);
   AFiles.Src:=FSrc;
   AFiles.Dest:=FDest;
   AFiles.DoCastle:=DoCastle;
   AFiles.CheckSign:=CheckSign; //wenn ich übrigens CheckSign absolut definiere: AFiles.CheckSign:='#' funktioniert es!?? Obwohl die Variable CheckSign ebenfalls '#' enthält!
   AFiles.NewFig:=FNewFig;

   // AFiles enthält korrekte Eingaben, hab ich schon öfters überprüft

   try
    if TcpClient.Connect then
      begin
         TcpClient.Sendln('GameFiles#');
         TcpClient.SendBuf(AFiles,sizeof(AFiles));;
      end;
   finally
     TcpClient.Disconnect;
   end;

   // auch das Senden funktioniert, ebenfalls überprüft

   DoCastle.QWing:=False;
   DoCastle.KWing:=False;
   DoEnPassant:=False;
   EnPassant.Possible:=False;

   { CheckSign überprüfen / Rückgabewert: Spiel aus (True / False) }
   if (CheckCheckSign(UserWhite))
     then exit;

   ChangeTurn;
end;
Hier das Empfangen der Daten:

Delphi-Quellcode:
procedure TBoardForm.TcpServerAccept(Sender: TObject;
  ClientSocket: TCustomIpClient);
var
  ReceivedLn: String;
  i: Integer;
  ReceivedKind: String;
  ReceivedInfo: String;
  AGameFiles: RGameFiles;
  AFiles: RSendFiles;
begin
   (...)

   ReceivedLn:=ClientSocket.Receiveln;

   i := Pos('#', ReceivedLn);
   ReceivedKind := Copy(ReceivedLn, 1, Pred(i));

   if (ReceivedKind = 'OpenGame') then (...)

   if (ReceivedKind = 'GameFiles') then
     begin
        ClientSocket.ReceiveBuf(AFiles,sizeof(AFiles));
        UpdateGame(AFiles); //das Problem ist, ich kann AFiles nicht gleich überprüfen, weil bei den überprüften Ausdrücken immer steht 'nicht verfügbarer Wert'. Wenn ich jedoch CheckSign beim Senden absolut definiere, kann ich hier per Ausdrucksüberprüfung zugreifen
        exit;
     end;

   if (ReceivedKind = 'Info') then (...);
end;
Delphi-Quellcode:
procedure TBoardForm.UpdateGame(FFiles: RSendFiles);
var
  AWhite: Boolean;
begin
   AWhite:=not(UserWhite); //sobald das Programm diese Routine erreicht, kommt die Zugriffsverletzung und eben nur, wenn CheckSign > '' ist und ich es nicht absolut definiere

   CheckSign:=FFiles.CheckSign;
   DoEnPassant:=FFiles.DoEnPassant;
   EnPassant:=FFiles.EnPassant;
   MoveFigure(Field,FFiles.Src,FFiles.Dest,False,True,FFiles.DoCastle,AWhite,
     FFiles.NewFig);
   DoEnPassant:=False;

   { CheckSign überprüfen / Rückgabewert: Spiel aus (True / False) }
   if (CheckCheckSign(not(UserWhite)))
     then exit;

   ChangeTurn;
end;

*Verzweiflung*
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:46 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