Einzelnen Beitrag anzeigen

Muetze1
(Gast)

n/a Beiträge
 
#3

Re: SocketServer / -Client: Übertragung eines Strings im Rec

  Alt 21. Jul 2008, 18:07
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
  Mit Zitat antworten Zitat