Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi [Indy] TCP. Wann Stream, wann Client.WriteLn? (https://www.delphipraxis.net/121634-%5Bindy%5D-tcp-wann-stream-wann-client-writeln.html)

Chrissi91 1. Okt 2008 15:16


[Indy] TCP. Wann Stream, wann Client.WriteLn?
 
Hio,

ich habe mich ein bisschen mehr mit TCP beschäftigt und stell mir gerade folgende Frage:

Wenn ich reinen Text versende, wie viel darf / sollte ich maximal in ein Client.WriteLn(); packen?

Könnte ich rein theoretisch 3 MB mit einem Mal an Text über WriteLn verschicken? Sollte ich dann lieber je 100 kb ein WriteLn versenden oder gleich ein Stream?

Können beim teilen in einzelne WriteLn's / Pakete auftreten?* Können Probleme beim Versenden von 3 MB in einem Paket Probleme auftreten?

Die 3 MB sind einfach nur ein Beispiel. Würde mich mal interessieren, wie ihr das macht.

* Da die Reihenfolge der empfangenen Pakee nicht festlegt, würde ich natürlich immer ein P1v50, P2v50, etc. voranstellen, um es anschließend sortieren zu können. Das "Problem" ist mir also durchaus bewusst. Aber könnten noch andere auftreten? Und wie kann ich feststellen, wann alle Pakete angekommen sind um sie zu sortieren (außer mit meiner Methode mit P1v50 (Part 1 von 50)).

STS301 1. Okt 2008 15:23

Re: [Indy] TCP. Wann Stream, wann Client.WriteLn?
 
wenn du 100kb mit nur reinem Text zusammenbringst :thumb:

schau dir einmal das OS Projekt von DataColl an, da gibt es ein Beispiel zum splitten der Datei.

Gruber_Hans_12345 1. Okt 2008 15:31

Re: [Indy] TCP. Wann Stream, wann Client.WriteLn?
 
Zitat:

Zitat von Chrissi91
Können beim teilen in einzelne WriteLn's / Pakete auftreten?* Können Probleme beim Versenden von 3 MB in einem Paket Probleme auftreten?

Alos, bie TCP brauchst dir im Gegensatz zu UDP keine Gedanken machen, die kommen bei TCP immer an und auch immer in richtiger Reihenfolge, dafür sorgt das TCP Protokoll (Ankommen tun die immer insofern, das es sonst eine Exception wirft, bei UPD muß die Reihenfolge nicht stimmen, und es können Pakete verloren gehen, ohne das es irgendwer mitbekommt)

... so viel ich mich noch ernnern kann

Chrissi91 1. Okt 2008 15:32

Re: [Indy] TCP. Wann Stream, wann Client.WriteLn?
 
:mrgreen:
Zitat:

Zitat von STS301
wenn du 100kb mit nur reinem Text zusammenbringst :thumb:

Könntest du den Satz nochmal umformulieren. Ich versteh dich nicht. :mrgreen:

Zu deinem Beispiel: Wie man Dateien splittet ist mir durchaus bewusst. Aber dann kann ich doch gleich nen Stream benutzen. :? Odere ich splitte den TEXT und versende ihn einzeln als WriteLn. :mrgreen: :mrgreen: :mrgreen:

gsh 1. Okt 2008 15:37

Re: [Indy] TCP. Wann Stream, wann Client.WriteLn?
 
also wenn du 3 MB über Writeln schickst ist das imho kein Problem
Wenn du das direkt in der GUI machst wir die GUI halt blockiert aber dafür kannst du ja die TidAntiFrezze benutzen.

Es wird dabei kein 3 MB Packet geschickt, sondern meist 1500 Byte große Packete (MTU). Soviele halt bis deine 3MB über die Leitung sind.

Chrissi91 1. Okt 2008 15:44

Re: [Indy] TCP. Wann Stream, wann Client.WriteLn?
 
Zitat:

Zitat von gsh
Es wird dabei kein 3 MB Packet geschickt, sondern meist 1500 Byte große Packete (MTU). Soviele halt bis deine 3MB über die Leitung sind.

Empfange ich das dann als 1 ReadLn? Sprich erkennen die Indy dann, dass da noch weitere folgen und warten solange? Oder muss ich alle ReadLns erst "sammeln"?

gsh 1. Okt 2008 15:50

Re: [Indy] TCP. Wann Stream, wann Client.WriteLn?
 
Zitat:

Zitat von Chrissi91
Empfange ich das dann als 1 ReadLn? Sprich erkennen die Indy dann, dass da noch weitere folgen und warten solange? Oder muss ich alle ReadLns erst "sammeln"?

Das empfangst du dann als 1 ReadLn. Solange du in diesem Text kein #10 und/oder #13 sendest! Wenn du nicht sicherstellen kannst das diese Zeichen vorkommen dann musst du stream verwenden

Chrissi91 1. Okt 2008 15:54

Re: [Indy] TCP. Wann Stream, wann Client.WriteLn?
 
Zitat:

Zitat von gsh
Zitat:

Zitat von Chrissi91
Empfange ich das dann als 1 ReadLn? Sprich erkennen die Indy dann, dass da noch weitere folgen und warten solange? Oder muss ich alle ReadLns erst "sammeln"?

Das empfangst du dann als 1 ReadLn. Solange du in diesem Text kein #10 und/oder #13 sendest! Wenn du nicht sicherstellen kannst das diese Zeichen vorkommen dann musst du stream verwenden

Oder ich ersetze diese Zeichen vorher mit von mir erstellten Codes und wandel sie am Ende wieder um.

Alles klar. Danke euch allen. Damit ist die Frage hiermit beantwortet. :)

inherited 1. Okt 2008 16:59

Re: [Indy] TCP. Wann Stream, wann Client.WriteLn?
 
Doch, es kommt als einzelne ReadLns, denn WriteLn hängt ein #10 oder #13 (welches, weiß ich nicht mehr) dahinter, sodass das ReadLn auf der anderen Seite solange liest, bis es zu diesem Zeichen gelangt. Macht SoNIC nicht anders. Wenn du also 300 mal WriteLn aufrufst, musst du auch 300 mal + x(wenn du eigene Zeilenumbrüche einbaust) ReadLn aufrufen, damit alle Daten ankommen. Als alternative kannst du einfach 299 mal WriteBuffer verwenden und erst beim letzten Teil WriteLn, dann reicht auf der Gegenseite einmal ReadLn aufzurufen

gsh 1. Okt 2008 18:01

Re: [Indy] TCP. Wann Stream, wann Client.WriteLn?
 
Zitat:

Zitat von inherited
Doch, es kommt als einzelne ReadLns, denn WriteLn hängt ein #10 oder #13 (welches, weiß ich nicht mehr) dahinter, sodass das ReadLn auf der anderen Seite solange liest, bis es zu diesem Zeichen gelangt. Macht SoNIC nicht anders. Wenn du also 300 mal WriteLn aufrufst, musst du auch 300 mal + x(wenn du eigene Zeilenumbrüche einbaust) ReadLn aufrufen, damit alle Daten ankommen. Als alternative kannst du einfach 299 mal WriteBuffer verwenden und erst beim letzten Teil WriteLn, dann reicht auf der Gegenseite einmal ReadLn aufzurufen

ich glaube du hast das falsch verstanden

er meinte wenn er 1 WriteLn aufruft und damit 3 MB sendet ob er dann einmal ReadLn machen muss oder öfter


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:06 Uhr.
Seite 1 von 2  1 2      

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