AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi [Indy] TCP. Wann Stream, wann Client.WriteLn?

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

Ein Thema von Chrissi91 · begonnen am 1. Okt 2008 · letzter Beitrag vom 1. Okt 2008
Antwort Antwort
Seite 1 von 2  1 2   
Chrissi91

Registriert seit: 28. Jul 2005
849 Beiträge
 
#1

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

  Alt 1. Okt 2008, 15:16
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)).
  Mit Zitat antworten Zitat
Benutzerbild von STS301
STS301

Registriert seit: 6. Nov 2007
668 Beiträge
 
Delphi 7 Personal
 
#2

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

  Alt 1. Okt 2008, 15:23
wenn du 100kb mit nur reinem Text zusammenbringst

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

ölpölp

Linux will rule the universe!!
  Mit Zitat antworten Zitat
Gruber_Hans_12345

Registriert seit: 14. Aug 2004
1.426 Beiträge
 
Delphi 2007 Professional
 
#3

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

  Alt 1. Okt 2008, 15:31
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
Gruss Hans

2B or not 2B, that is FF
  Mit Zitat antworten Zitat
Chrissi91

Registriert seit: 28. Jul 2005
849 Beiträge
 
#4

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

  Alt 1. Okt 2008, 15:32
Zitat von STS301:
wenn du 100kb mit nur reinem Text zusammenbringst
Könntest du den Satz nochmal umformulieren. Ich versteh dich nicht.

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.
  Mit Zitat antworten Zitat
Benutzerbild von gsh
gsh

Registriert seit: 24. Okt 2004
1.542 Beiträge
 
Delphi XE Architect
 
#5

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

  Alt 1. Okt 2008, 15:37
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.
Alex
"Sage nicht alles, was du weißt, aber wisse alles, was du sagst!" Matthias Claudius
"Wer sich über Kritik ärgert, gibt zu, daß er sie verdient hat." Tacitus
  Mit Zitat antworten Zitat
Chrissi91

Registriert seit: 28. Jul 2005
849 Beiträge
 
#6

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

  Alt 1. Okt 2008, 15:44
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"?
  Mit Zitat antworten Zitat
Benutzerbild von gsh
gsh

Registriert seit: 24. Okt 2004
1.542 Beiträge
 
Delphi XE Architect
 
#7

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

  Alt 1. Okt 2008, 15:50
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
Alex
"Sage nicht alles, was du weißt, aber wisse alles, was du sagst!" Matthias Claudius
"Wer sich über Kritik ärgert, gibt zu, daß er sie verdient hat." Tacitus
  Mit Zitat antworten Zitat
Chrissi91

Registriert seit: 28. Jul 2005
849 Beiträge
 
#8

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

  Alt 1. Okt 2008, 15:54
Zitat von gsh:
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.
  Mit Zitat antworten Zitat
Benutzerbild von inherited
inherited

Registriert seit: 19. Dez 2005
Ort: Rosdorf
2.022 Beiträge
 
Turbo Delphi für Win32
 
#9

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

  Alt 1. Okt 2008, 16:59
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
Nikolai Wyderka

SWIM SWIM HUNGRY!
Neuer Blog: hier!
  Mit Zitat antworten Zitat
Benutzerbild von gsh
gsh

Registriert seit: 24. Okt 2004
1.542 Beiträge
 
Delphi XE Architect
 
#10

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

  Alt 1. Okt 2008, 18:01
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
Alex
"Sage nicht alles, was du weißt, aber wisse alles, was du sagst!" Matthias Claudius
"Wer sich über Kritik ärgert, gibt zu, daß er sie verdient hat." Tacitus
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 00:46 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