Entwickler-Ecke

Internet / Netzwerk - Schon übertragen


O'rallY - Do 26.09.02 20:16
Titel: Schon übertragen
Wie kann ich herausfinden, wenn ich einen Stream über eine TClientSocket-Komponente übertrage (SendStream), wieviel schon übertragen wurde?


DeCodeGuru - Do 26.09.02 20:25

man könnte einen zweiten Port öffnen, über den man dann Statusinfos schickt. Also einen Statuskanal und einen Transferkanal. Wenn du die Daten die empfangen werden in ein Stream schreibst, kannst du ja mit SizeOf(MyStream); die Größe des Stream herausfinden und dann die Info über den Statuskanal senden.


O'rallY - Do 26.09.02 20:28

Hmm, werd ich mal ausprobieren müssen.


DeCodeGuru - Do 26.09.02 20:35

jo, musst du wohl :mrgreen: was man auch machen könnte ist, dass man den Transfer nach 10 übertragenden Packeten mal den Transfer unterbricht, Infos sendet und die Transfer wieder aufnimmt, was aber etwas schwieriger zu realisieren ist. Je nach dem, wie man die Daten sendet.


O'rallY - Do 26.09.02 20:39

ok, so richtig verstanden habe ich noch nicht was du meinst. Könntest du das bitte noch etwas erläutern? Das man mit SizeOf die Größe einer Variable festellen kann ist mir klar, nur müsste man mit deinem Verfahren ständig die Dateigröße an den Client übermitteln und ich wüsste nicht woher ich eine "Zwischengröße" herbekommen soll. Das Event OnClientWrite schlägt ja erst an, wenn der Client schon geschrieben hat. Do you understand what I mean?

Anmerkung: bezieht sich auf deinen ersten Poste


O'rallY - Do 26.09.02 20:42

Wie kann man den Transfer nach x Packeten unterbrechen? :) Ok, ich könnte mir das so vorstellen, dass man das ganze Stückchen für Stückchen sendet.


DeCodeGuru - Do 26.09.02 20:43

also, nehmen wir an, dass du beim Client oder Server (is ja auch egal) in der Empfangroutine einen Buffer (buffer: array [0..4096] of Byte; o.ä.) verwendest in dem du immer die empfangenen daten reinschreibst. Dieser Buffer wird dann einfach in ein FileStream geschrieben. So, jetzt kannst du ja nach dem Schreiben in den Filestream einfach die Größe des FileStreams nehmen und die Info über den Infoport senden.

Also, so muss/kann dass eigentlich funktionieren. Es kommt halt darauf an, wie du deine Senden-routine aufgebaut hast.


O'rallY - Do 26.09.02 20:48

Ok, verstehe was du meinst, nur muss ich dann meine Sendroutine umschreiben (wie du schon sagtest). Ich wollte halt zuerst das Ganze nicht selbst zerstückeln und dann wieder zusammenfügen, sondern die bequemere methode SendStream benutzen, um eine Datei praktisch an einem Stück zu übermitteln. Ok, ich gebs zu, ich bin vielleicht ein bisschen faul :wink: :mrgreen:
Ach ja, danke für die schnellen Antworten


O'rallY - Do 26.09.02 20:58

Noch eine Frage, wie groß sollte ein Packet ca. sein, was ist dei Standardgröße?


DeCodeGuru - Do 26.09.02 21:13

jo, des kommt meiner meinung nach auf die übertragungsgeschwindigkeit an. Also wenn man das programm zum übertragen in einem 100-Mbit-Netzwerk verwendet kann man ruhig mal etwas mehr draufhauen. Aber ansonsten verwende ich eigentlich 4096. Das habe ich mal so verwendet und hatte keine probleme. Da ich ADSL habe, schaffe ich einen Upstream von 128 KBit/sec. :arrow: 16KByte/sec. Da meine Buffergröße 4096 beträgt (genau 4KB) kann ich also ca. 4 Packete die Sekunde schicken. Wenn man jetzt nur ISDN hat, hat man nen Up/downstream von 64KBit :arrow: 2 Packete die Sekunde und nen 33,1K-Modem hat ja keiner mehr. Oder? :wink:

Warum habe ich das jetzt eigentlich erzählt? Achja, wollte nur zeigen, wie ich mir das mal zusammengereimt habe :mrgreen: