Einzelnen Beitrag anzeigen

hugo1990

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

Datei gesplittet über TClientSocket/TServerSocket versenden

  Alt 4. Mär 2008, 14:47
Zur Zeit versende ich die Dateien mittels SendStream, nur kann man da die Übertragung nicht abbrechen. Also dachte ich mir, das ich den Stream in kleine Teile aufsplitte und somit die Übertragung einfach unterbrechen kann. Dazu habe ich folgende Code geschrieben:
Delphi-Quellcode:
procedure TFileClient.SendData(Sender: TObject; Socket: TCustomWinSocket);
var Header: AnsiString;
    Size: Int64;
    Stream: AnsiString;
const
  MaxSize = 1024;
begin
  if Assigned(FFile) then
    begin
    Header := #5+'header'+#6+ExtractFileName(FFile.Filename)+#6+IntToStr(FFile.Stream.Size)+#6+'/header'+#7;
    Socket.SendBuf(Header[1], Length(Header));
    if FFile.Stream.Size < MaxSize then Size := FFile.Stream.Size
      else Size := MaxSize;
    SetLength(Stream, Size);
    while FFile.Stream.Read(Stream[1], Size) <> 0 do
      begin
      //sleep(50);
      //Application.ProcessMessages;
      Socket.SendBuf(Stream[1], Size);
      if FFile.Stream.Size-FFile.Stream.Position < MaxSize then Size := FFile.Stream.Size-FFile.Stream.Position
        else Size := MaxSize;
      SetLength(Stream, Size);
      end;
    end;
end;
Nur kommt da irgendwie garnichts vom Stream an, erst wenn ich das Sleep und das Application.ProcessMessages einfüge sendet er die Daten, aber die Geschwindigkeit der Übertragung leidet darunter und wenn ich die zeit bei Sleep kleiner wähle, bricht er die Übertragung sozusagen mittendrin ab und es wird nichts mehr versendet. Weiß jemand woran das liegt oder gibt es eine bessere Möglichkeit den Stream gesplittet zu versenden, so das man die Übertragung zwischendurch abbrechen kann.
  Mit Zitat antworten Zitat