Einzelnen Beitrag anzeigen

Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#2

Re: Indy TCP: Was ist der IOHandler?

  Alt 26. Nov 2006, 11:00
Zitat von Stefan Hueg:
Bei der Indy TCP Server Komponente gibt es ja eine Property namens IOHandler. Was ist das genau? In der Hilfe wurde ich nicht so recht fündig bzw. es war für mich verwirrend.
Hi nochmal,
ja, an dieser Stelle möchte ich dann doch darauf hinweisen, wenn etwas verwirrend für dich ist, dann wäre es doch nett wenn du genauer sagst was. Was hast du denn der Hilfe schon entnommen, was nicht verstanden?
Dass du direkt ein IOHandler Objekt auf die Form legen kannst finde ich jetzt verwirrend, nebst dass das Ding TIdIoHanlder heißen würde (was ja soweit kein Problem ist) handelt es sich dabei um die abstrakte Basis. Du kannst nur Nachfahren dieser Klasse auf die Form legen!

Was du dann im Objektinspektor findest sind keineswegs alle Methoden und Eigenschaften des Objekts, nur die die veröffentlicht wurden. Du kannst aus dem Editor heraus auch auf alles was öffentlich ist zugreifen, wenn du eine Klasse von TIdIoHandler ableitest auch auf die Dinge die protected sind. In der Hilfe findest du aber natürlich alle Informationen.

An sich handelt es sich beim IO-Handler von Indy um ein Framework. Du hast hier eine abstrakte Basis um IO über zwei Indy Komponenten zu realisieren. IO steht dabei natürlich für Input/Output, dass hast du schon richtig gesagt. Du kannst also Daten irgendwie zwischen zwei Indy Komponenten übertragen.
Möchtest du dies tun, besteht der Vorgang ja in der Regel aus einer einfachen Abfolge von Dingen:
  • Erzeugen von Sender und Empfänger
  • Lesen des Datums, dass verschickt werden soll
  • Warten bis Sender bereit
  • Prüfen ob Empfänger bereit ggf. auf diesen Warten
  • Senden des Datums
  • Lesen des Datums durch den Empfänger
  • ggf. Empfang bestätigen

Das ist noch stark vereinfacht. Einen großen Teil nehmen dir die Indy-Komponenten ohnehin schon ab, so ist das Protokoll ja durch die Komponenten gekapselt. Das Hauptproblem ist, dass du wissen musst wann Sender und Empfänger zum Übertragen bereit sind. Möchtest du eine große Datei übertragen, während der Empfänger diese aber gerade nicht entgegen nehmen möchte, so könnten die Daten einfach verworfen werden und du kannst wieder und wieder und wieder Senden, bis du zufällig mal Glück hast. Das würde allerdings unnötig viel Verkehr erzeugen, was selten erwünscht ist. Besser ist es erst zu senden, wenn der Empfänger auch bereit ist.
Das Framework nimmt dir hauptsächlich diese Arbeit ab. Es ist aber nur eine abstrakte Basis, die du leicht an deine Bedürfnisse anpassen kannst. Dazu musst du nur die virtuellen Methoden mit eigener Logik überschreiben. Sendest du ein Datum, so werden diese virtuellen Methoden verwendet. In der OOP steckt dahinter eine Indirektion (nachschauen in einer Tabelle, welche Methode hier wirklich verwendet wird) und es würde deine Logik aufgerufen werden, ohne dass die restliche Logik verloren geht (warten bis bereit, verwenden des Puffers, ...).

Hoffe auch ier ist grob klar wo der Sinn liegt. Es ist aber ganz klar nur ein Framework, also etwas sehr Flexibles, dass dir eine Basis schafft auf der du spezielle Implementierungen aufbauen kannst.

Gruß Der Unwissende
  Mit Zitat antworten Zitat