2017-02-10 2 views
1

idTelnet.Connectを呼び出すと、通常、リモートデバイスに即座に接続されます。
ただし、
リモートデバイスが応答しない場合、 idTelnet.Connectの呼び出しは返されません。
リモートデバイスからの応答を待ちます。Delphi 6. idTelnet.Connectのタイムアウトを設定すると、接続していない場合の早期復帰ができません。

これは、アプリケーション全体をハングします。 idTelnet.Connectにかかわらず、接続が確立されているかどうかのNNミリ
以内に返すように、私はタイムアウトを設定するにはどうすればよい

+0

コードをバックグラウンドスレッドで実行することをお勧めします。 – mjn

+0

ConnectTimeoutプロパティはありますか?もしそうでなければ、現在のIndyを試してみよう10.6.2 – mjn

+0

Indy 10では、 'TIdTCPClient'は' ConnectTimeout'プロパティを持っています。 Indy 9では 'ConnectTimeout'プロパティはありませんが、' Connect() 'にはオプションの' ATimeout'パラメータがあります。 –

答えて

1

リモートデバイスが応答しない場合、idTelnet.Connectの呼び出しは返されません。

はい、最終的になります。

リモートデバイスからの応答を待ちます。

OSが最終的にあきらめて接続に失敗するまで、Indyが例外として発生させるエラーを報告します。

これは、アプリケーション全体をハングします。

つまり、最初に行うべきではないメインのUIスレッドのコンテキストでConnect()を呼び出していることを意味します。これを行う必要がある場合は、少なくとも、TIdAntiFreezeコンポーネントをMainFormに配置します(そして、導入される可能性があるリエントリの結果を処理できるように準備してください)。それ以外の場合は、ソケットコードを別のワーカースレッドに移動してください。

接続が確立されているかどうかにかかわらず、idTelnet.Connectがnn ms以内に戻るようにタイムアウトを設定するにはどうすればよいですか?

使用しているインディのバージョンはありません。 Delphi 6は非常に古いです。 Indy 8には、出荷時のバージョンのIndyを使用している場合は、Indy 8または多分9を使用しています。Connect()は、Indy 8ではタイムアウト機能が全くありません。Indy 9では、ATimeoutというパラメータがあります。 Indy 10では、ATimeoutパラメータが新しいConnectTimeoutプロパティに置き換えられました。

+0

ありがとうございます。 – AndersJ

+0

Delphi 6をIndy 10にアップグレードできますか? – AndersJ

+0

[はい、できます](http://ww2.indyproject.org/Sockets/Docs/Indy10Installation.EN.aspx)。実際には、Indy 10はDelphi 5のすべてをサポートしています。 –

関連する問題