Einzelnen Beitrag anzeigen

SeEk0rN

Registriert seit: 21. Sep 2003
20 Beiträge
 
Delphi 7 Professional
 
#1

Datentransfer-Problem mit TMemoryStream

  Alt 7. Dez 2003, 17:53
Folgenden Code nutze ich zum versenden:
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
var
  maxUpl: Integer;
begin
  maxUpl := ScrollBar1.Position * 1024;
//Max Byte Anzahl die gesendet werden darf
  If maxUpl >= sM.Size - sM.Position then // Wenn mehr gesendet werden darf
  begin // als noch zu senden ist:
    ClientSocket1.Socket.SendBuf(Pointer(Int64(sM.Memory) + sM.Position)^,
                                 sM.Size - sM.Position);
    Timer1.Enabled := False;
  end else begin // Soviel Bytes senden wie in maxUpl steht
    ClientSocket1.Socket.SendBuf(Pointer(Int64(sM.Memory) + sM.Position)^,
                                 maxUpl);
    sM.Position := sM.Position + maxUpl;
  end;
end;

Und folgenden zum Empfangen von Dateien:
Delphi-Quellcode:
var
  rL: Integer;
begin
  rL := Socket.ReceiveLength; // rL die Größe der empfangen Daten zuweisen
  If rL = 0 then Exit; // Es kann sein das nix ankommt, das wäre schlecht ;)
  If Rec then
  begin // Wenn im Receive-Mode:
    Socket.ReceiveBuf(Pointer(Int64(rM.Memory) + rM.Position)^, rL);
    rM.Position := rM.Position + rL; // Position setzen
    If rM.Position = rSize then // Wenn Datei vollständig:
    begin
      rM.SaveToFile('C:\Receive.txt'); // Datei Speichern
      rM.Clear; // Stream leeren
      Label1.Caption := 'Übertragung fertig';
      Rec := False; // aus den Receive-Mode gehen
    end;
  end else begin
    rSize := StrToInt(Socket.ReceiveText); // rSize die Größe der Datei zuweißen
    rM.SetSize(rSize); // Speicher reservieren
    rM.Position := 0; // Position auf Null setzen
    Rec := True; // Auf Receive-Mode stellen
    Socket.SendText('ok'); // Bestätigung senden
  end;
end;

Das Problem ist nun, wenn ich die maximale Uploadgeschwindigkeit zB auf 16 KB stell und eine 500 KB große Datei verschick dann ist kurz nach der Hälfte der Datei Schluss mit empfangen, gesendet wird alles, zumindest wird es so angezeigt. Nur empfangen wird nur ca. die Hälfte, dann is ende mit Datentransfer beim Empfänger.
Ist die eingestellte Uploadgeschwindigkeit allerdings sehr hoch, dann tritt das Problem nicht auf.

Das Problem tritt auch nur im Internet auf, wo die Upload-/Downloadrate entsprechend auch nich so hoch is, im Netzwerk wird alles problemlos verschickt.

Allerdings habe ich keine ahnung, wieso das im Internet nicht geht.
  Mit Zitat antworten Zitat