Moin!
"Array of Char" ist ein dynamisches Array und somit wird in der Struktur nicht die Daten an sich sondern nur die Adresse der Daten gespeichert. Somit überträgst du nur die Adresse der Daten, welche nur in deinem sendenen Prozess gültig ist und dem Empfänger rein gar nichts nützen.
Wenn du variable Strings versenden willst, dann musst du dich grundlegend schonmal von den festen Strukturen einer Record Definition trennen. Du musst den String in zwei Bestandteilen versenden: als erstes die Länge und dann die Daten des Strings selbst.
Pseudo-Code senden:
Delphi-Quellcode:
procedure SendString(ASocket: TCustomWinSocket; const AData: string);
var
lLen: integer;
begin
lLen := length(AData);
ASocket.SendBuf(lLen, sizeof(lLen)); // 4 Bytes mit der Länge der folgenden Stringdaten
ASocket.SendBuf(AData[1], lLen);
end;
Pseudo-Code empfangen:
Delphi-Quellcode:
function ReceiveString(ASocket: TCustomWinSocket; const AData: string): string;
var
lLen: integer;
begin
result := '';
if ASocket.ReceiveLength >= sizeof(lLen) then
begin
ASocket.ReceiveBuf(lLen, sizeof(lLen)); // 4 Bytes mit der Länge der folgenden Stringdaten
if ( lLen > 0 ) and ( ASocket.ReceiveLength >= lLen ) then
begin
SetLength(result, lLen);
ASocket.ReceiveBuf(result[1], lLen);
end;
end;
end;
MfG
Muetze1