Hallo,
ich versuche gerade ein älteres Programm via Telnet fernzusteuern und benutze dazu in meinem Programm die
Indy-Komponente TIdTelnet.
Prinzipiell klappt auch alles, wie ich mir das vorstelle und ich hab auch eine Art automatischem Dialog hinbekommen (mit ein paar Ideen hier aus dem Forum).
Aber wenn ich nun entweder über das Command "Quit" das Ganze beende, oder über Telnet.Disconnect kommt immer die o.g.
Exception.
Das ist zum einen unschön, zum anderen scheint aber auch der TelnetServer der Gegenseite(?) dabei eine Macke abzubekommen (oder doch mein Programm). Denn wenn ich mich erneut verbinden will, wird der Login angefordert. Wird dieser gesendet friert mein Programm ein und es passiert gar nichts mehr.
Das passiert auch, wenn ich das Programm wieder direkt nach der EIdCloesdGracefully neu starte und mich neu verbinden will.
Erst ein paar Sekunden/Minuten später, mit einem neu gestarteten Programm, klappt die Verbindung wieder.
Hat da jemand Erfahrungen, woran das liegen könnte? Vor allem das dies
Exception kommt. Bei "CloesdGracefully" würd ich doch eher sagen: Danke schön, warum aber eine
Exception?
Aus der Einführung in
Indy auf
http://conferences.embarcadero.com/article/32159:
Zitat:
If the other side has closed the connection and the socket is read or written to, EIdConnClosedGracefully will be raised by
Indy. This is similar to attempting to read or write to a file that has been closed without your knowledge.
Die
Exception wird ausgelöst wenn der Client versucht, nach dem Disconnect noch einmal auf den Socket zu schreiben oder zu lesen.
IdTelnet verwendet einen Thread um auf Nachrichten des Servers zu warten. Dieser Thread greift in einer Schleife lesend auf den Socket zu.
Wenn die Verbindung getrennt wird (mit IdTelnet.Disconnect oder .Active := False, da bin ich nicht sicher), muss
Indy auch den Thread beenden.
Falls es nach dem Disconnect keine Stelle im eigenen Code mehr gibt die liest oder schreibt, würde ich erst einmal eine aktuelle
Indy Version ausprobieren.