PDA

Visualizza la versione completa : [DELPHI] IdTCPClient e mancanza di rilevazione connessione interrotta


denis76
04-07-2007, 15:52
Ho un problema serio.
In un programma faccio uso del componente Indy 10 IdTCPClient per connettermi ad un server. Se la connessione si interrompe per

non viene sollevata nessuna eccezione,
IdTCPClient.Connected ritorna true,
se faccio un IdTCPClient.IOHandler.Write() non succede nulla.

Come posso fare per capire quando un terminale non pi raggiungibile?

alka
04-07-2007, 22:49
Mi pare un po' strano che la richiesta prosegua senza alcuna segnalazione, visto che l'interlocutore via socket non pu nemmeno essere raggiunto.

Verificherei che non vi siano elementi che bloccano la generazione di eccezioni, ad esempio la presenza (anche in passato) di un componente TApplicationEvents.

denis76
04-07-2007, 22:58
Non c', il codice molto semplice. Ti dir che sto passando ai vecchi componenti TcpServer e TcpClient.
Non riesco a trovare in alcun modo una via per risolvere il mio problema.

alka
04-07-2007, 23:06
Originariamente inviato da denis76
Non c', il codice molto semplice. Ti dir che sto passando ai vecchi componenti TcpServer e TcpClient.
Non riesco a trovare in alcun modo una via per risolvere il mio problema.
Non saprei che cosa suggerirti, in quanto non l'ho mai riscontrato. :bh:

denis76
04-07-2007, 23:08
Normalmente scrivi applicazioni per la rete? Che componenti usi?

alka
04-07-2007, 23:26
Originariamente inviato da denis76
Normalmente scrivi applicazioni per la rete? Che componenti usi?
Uso gli Indy Components. Ho sviluppato un programma per la gestione e lo smistamento della posta elettronica, e sto realizzando un programma per l'upload/download di file su un server sicuro.

In entrambi i casi, quando si riscontra un'interruzione, l'eccezione "Connection closed gracefully" viene sempre generata, e comunque sempre possibile determinare se la connessione ancora attiva, o tramite un'eccezione istantanea, oppure dal fatto che l'operazione in corso (bloccante) riconduce ad un "timeout", prima o poi.

Loading