AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Datentransfer-Problem mit TMemoryStream
Thema durchsuchen
Ansicht
Themen-Optionen

Datentransfer-Problem mit TMemoryStream

Ein Thema von SeEk0rN · begonnen am 7. Dez 2003 · letzter Beitrag vom 7. Dez 2003
 
SeEk0rN

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

Datentransfer-Problem mit TMemoryStream

  Alt 7. Dez 2003, 16: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
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:41 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz