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?