Hallo,
du lässt BlockRead() immer 1024 Byte lesen, aber beim letzten Lesevorgang ist die Chance groß, dass weniger als 1024 Byte gelesen werden können. Du kannst die Zahl der wirklich gelesenen Bytes in einer Variablen erhalten, die du als vierten Parameter von BlockRead() übergibst. Diese Variable kannst du dann zum Steuern von SendBuf() verwenden, damit nicht mehr als die gelesenen Bytes versendet werden.
Delphi-Quellcode:
// look ma, no hands!
procedure FileSend(const fn: TFilename; socket: TBaseSocket);
var
s: TStream;
begin
s := TFileStream.Create(fn, fmOpenRead);
try
socket.SendStream(s);
finally
s.Free;
end;
end;
Wieder getippt und nicht getestet.
Freundliche Grüße