Einzelnen Beitrag anzeigen

mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#4

AW: Telnet Exception EIdCloesdGracefully

  Alt 31. Jul 2012, 12:15
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.
Michael Justin
  Mit Zitat antworten Zitat