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