Einzelnen Beitrag anzeigen

hugo1990

Registriert seit: 27. Dez 2006
166 Beiträge
 
Turbo Delphi für Win32
 
#1

Problem mit SendStream und ReceiveBuf

  Alt 27. Feb 2008, 16:43
Ich möchte gern Dateien mittels TClientSocket und TServerSocket versenden und habe das folgendermaßen realisiert.

Client:
FClient.Socket.SendStream(Stream); Server:
Delphi-Quellcode:
procedure TFileServer.ReceiveData(Sender: TObject; Socket: TCustomWinSocket);
var
  Buffer: Pointer;
  Size: Integer;
begin
  Size := Socket.ReceiveLength;
  Socket.ReceiveBuf(Buffer^, Size);
  FileStream.Write(Buffer^, Size);
end;
Das funktioniert auch einwandfrei, nur möchte ich jetzt gerne noch ein paar Dateiinfos vorneweg schicken. Da hab ich mir gedacht, ich schicke über SendBuf eine Kette von Bytes und zwar so.

Delphi-Quellcode:
procedure StrToBytes(Text: String): TByteArray;
var I:Integer;
begin
  for I := 1 to Length(Text) do
    begin
    Result[I-1] := Ord(Text[I]);
    end;
end;
Client:
Delphi-Quellcode:
procedure TFileClient.SendData;
var
  Text: TByteArray;
begin
  Text := StrToBytes('Dateiinfo');
  FClient.Socket.SendBuffer(Text, Length('Dateiinfo'));
  ...
end;
Server:
Delphi-Quellcode:
procedure TFileServer.ReceiveData(Sender: TObject; Socket: TCustomWinSocket);
var
  PBytes: PByteArray;
  Bytes: TByteArray;
  Size: Integer;
begin
  Size := Socket.ReceiveLength;
  GetMem(PBytes, Size);
  Socket.ReceiveBuf(PBytes^, Size);
  Bytes := PBytes;
  ...
end;
In "Bytes" sind jetzt aber viel mehr Bytes als versendet wurden. Bei meinen Tests war die zu versendende Datei 20 Bytes, aber in "Bytes" sind sich 32000 Bytes. Was mache ich falsch?
  Mit Zitat antworten Zitat