IdTelnet->Disconnect() ausser Kraft?
-
Hallo und guten Morgen,
... das "Disconnect();" im Hauptthread wird nicht richtig ausgeführt, seit dem ich Daten mit "OnDataAvailable" empfange. Das Disconnect schliesst eigentlich die Socket-Verbindung. Am Thread scheints nicht zu liegen, dasselbe Problem habe ich nämlich auch wenn ich ein Prog nehme das ohne Thread arbeitet. Das Schliessen der Verbindung funktioniert bisher nur, wenn ich für OnDataAvailable keine Ereignis-Behandlung schreibe.
... In OnCloseQuery sieht der entscheidende Teil so aus:... else //falls Ok gewählt wurde IdTelnet1->OnDisconnect= 0; //Deaktivieren des OnDisconnect-Ereignis if (FNewThread) FNewThread->Terminate(); //wenn Thread vorhanden, Thread schliessen CanClose = true; //HauptForm wird geschlossen }Eigentlich wird beim Zerstören der MainForm auch das Socket getrennt...
Zusätzlich gibt es im Prog einen Button, mit dem die Verbindung getrennt werden kann.
Auch hier bleibt aber die Verbindung nach dem Disconnect auf der Gegenseite bestehen:... else //wenn verbunden { if (FNewThread) FNewThread->Terminate(); IdTelnet1->Disconnect(); //Verbindung zu Remote-IP trennen } }Schon rätselhaft - ich bin echt ratlos

(1) Hat jemand eine Idee, warum das Socket nicht sauber geschlossen / getrennt wird?
MfG
-
Hallo,
auch dieses Problem muss ich nochmal rauskramen. (2) Was sagt mir im Zshg mit dem Disconnect()-Problem folgende Fehlermeldung:
In Projekt ... ist eine Exception der Klasse EIdClosedSocket mit der Meldung 'Verbindung aufgehoben.' aufgetreten. ???
Diese erscheint, wenn ich das Prog schliesse. Die Methode für "Prog schliessen" sieht so aus:
void __fastcall TIndyTelnetClient::FormCloseQuery(TObject *Sender, bool &CanClose) { int A; A= MessageBox (void(), "... Verbindung wird automatisch getrennt!", \ "Beenden ...", MB_ICONWARNING | MB_OKCANCEL | MB_DEFBUTTON1); if (A== IDCANCEL) { CanClose = false; } else if (A== IDOK) { IdTelnet1->OnDisconnect= 0; //deakt - EventFkt greift durch automat. Disconnect nach Destroy auf Form zu CanClose = true; } }Liegt es viell. daran, dass ich keine Ereignis-Behandlung für OnDisconnected habe? Kann ich mir nicht vorstellen...
Fakt ist, die Verbindung besteht immernoch nach ProgEnde, bzw. die andere Seite wartet noch, eh Win das Socket endgültig schliesst.
MfG
-
Hi,
ich kann und will mir irgendwie nicht vorstellen, dass dazu niemand ne Idee hat...

Bitte gebt Euren Senf dazu, wenn Ihr auch nur ansatzweise eine Idee
habt.Danke
MfG