Deine Schleife zum Senden der Daten missachtet die Tatsache, dass die Datei ja nicht unbedingt ein Vielfaches von 1024 Bytes sein muss.
Deine Funktion würde also immer aufrunden und damit am Ende der Datei Müll übertragen.
Hier die Korrektur, die ich aber nicht getestet, sondern nur so eingetippt habe:
Delphi-Quellcode:
procedure TForm1.Button4Click(Sender: TObject);
var datei1: TStream;
buff : array[0..1023] of byte; // arrays, die mit Untergrenze 0 beginnen sind effizienter
bytes : integer;
begin
if opendialog1.Execute then
begin
datei1 := TFileStream.Create(OpenDialog1.FileName, fmOpenRead or fmShareDenyWrite);
repeat
bytes := datei1.Read(buff[0],sizeof(buff)); // das Ergebnis von .Read() muss immer ausgewertet werden
if bytes > 0 then
clientsocket1.Socket.SendBuf(buff[0], bytes);
until bytes = 0;
datei1.Free;
end;
end;