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
Antwort Antwort
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
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Datentransfer-Problem mit TMemoryStream

  Alt 7. Dez 2003, 17:07
das tcp/ip protokol hat doch eigentlich ne Fehlerkorektor oder nicht?? probiers mal mit TIdTCPServer und dem entsprechenden client dazu
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
SeEk0rN

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

Re: Datentransfer-Problem mit TMemoryStream

  Alt 7. Dez 2003, 17:47
Ist es denn mit der Indy-Komponente möglich eine Art OnProgress zu haben, beim Senden, so wie Empfangen? Damit ich halt nen Statusbalken mit dem Fortschritt habe, denn sonst bringt es mir auch nichts.
  Mit Zitat antworten Zitat
Antwort Antwort


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 20:01 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