Einzelnen Beitrag anzeigen

Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Datenübertragung Sendbuf....

  Alt 31. Dez 2008, 03:36
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;
  Mit Zitat antworten Zitat