Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Indy TCP Write Record (https://www.delphipraxis.net/165465-indy-tcp-write-record.html)

DArc 1. Jan 2012 17:39

Indy TCP Write Record
 
Hey Delphianer!

Ich hätt da mal ne Frage, undzwar versuche ich mein Record
an ein Server zu schicken.

Delphi-Quellcode:
type
  TMyRecord = packed record
    OpCode:  Byte;
    Data : array[0..255] of char;
  end;
So funktioniert das:

Delphi-Quellcode:
procedure TMyClass.ClientOnConnected(Sender: TObject);
var
  LBytes:  TIdBytes;
  LRecord: TMyRecord;
  Str:     string;
begin

  Str := 'test';

  FillChar(LRecord, SizeOf(LRecord), #0);
  LRecord.OpCode := 5;
  StrPLCopy(LRecord.Data, (Str), Length(LRecord.Data));
  SetLength(LBytes, SizeOf(LRecord));
  Move(Lrecord, LBytes[0], SizeOf(LRecord));

  Client.IOHandler.Write(LBytes);
end;
Aber wenn ich die Zeile
Delphi-Quellcode:
  Str := 'test';
mit

Delphi-Quellcode:
  Str := (Gebe_String_Zurück);
ersetze, dann bekomme ich nen Error:

Code:
---------------------------
Debugger Exception Notification
---------------------------
Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 00465C39 in module 'Project1.exe'. Read of address 00000090'. Process stopped. Use Step or Run to continue.
---------------------------
OK  Help  
---------------------------
Ich frage mich warum das so ist ...

So empfang ich mein Record
Delphi-Quellcode:
procedure TForm1.ServerExecute(AContext: TIdContext);
var
LBuffer : TIdBytes;
LRecordReceived : TMyRecord;
begin
  //SetLength(LBuffer, SizeOf(LRecordReceived));
  with AContext.Connection do
    try
      IOHandler.ReadBytes(LBuffer, SizeOf(LRecordReceived), false);
      Move(LBuffer[0], LRecordReceived, SizeOf(LRecordReceived));
      showMessage(IntToStr(LRecordReceived.OpCode));
      Log.Lines.Add(LRecordReceived.Data);
    finally
      Disconnect;
  end;
end;
Ich hoffe ihr könnt mir da helfen, ich hab echt keine Ahnung warum das nicht geht.

Mfg DArc

Edit: Achja, während dem Debuggen ist der String korrekt gefüllt.
Edit2: Habe mein Delphi wieder angeschmissen und komischerweise gehts jetzt ... echt merkwürdig, vorallem weil ich zuvor ne Stunde versucht hab das zum Laufen zu bringen :D
Das Schlimmste ist, dass ich nicht mal weiß woran es lag, weil ich ja nichts geändert habe -.-! Naja es geht jetzt! Vielleicht hat ja jemand interesse an dem Code, dann wär
dieser Post doch nicht ganz umsonst xD


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:43 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