TCPClient について

解決


ごん  2005-06-14 07:18:05  No: 15618

TCPClient コンポーネントでタイムアウトの設定はできないのでしょうか?
できないようなので・・・

TIdTCPClient を使ってみました。
TIdTCPClientを使うとタイムアウトできるみたいですけど
IdTCPClient1.Connected(30000);
この状態だと30秒間戻ってこないのですが、
IdTCPClient1の接続に割り込んでキャンセルできないのでしょうか?

上記と同様に
TIdTCPClient を使ってコマンドを送った場合に
IdTCPClient.ReadTimeout := 30000;
IdTCPClient.SendCmd('ABC', [220]);
30秒待たずに、キャンセルできたりできませんか?


にしの  2005-06-14 07:42:01  No: 15619

Indyの場合は、AntiFreezeが効果あるかも。
ひとまず、TIdAntiFreezeをフォームに貼り付けてみてください。
キャンセルできるかどうかは調べていませんが、固まったまま待つことは無くなると思います。


ごん  2005-06-15 19:10:32  No: 15620

FTPもどき(一部のコマンドが受け付けない)の
サーバーからファイルを受信しようとしています。

TIdTCPClient でやろうと思ったのですが
TIdFTP でファイルの受信はできそうなのでこちらを使うことにしました。
親は TIdTCPClient なので質問的には TIdTCPClient になるのですが、

接続回線が不明のためタイムアウトを
IdTimeoutInfinite(無限) にします。
この状態であれば受信状態が悪くてもハードに問題がなければ
アプリケーションで中断されることなくデータの送受信が
できると考えています。

問題はフォーム上に「中止」ボタンが設置されていて、
このボタンが押された場合には TIdFTP(TIdTCPClient) を
切断(DisConnect)して復帰できるようにしたいのですが
どうすればよいでしょうか?


にしの  2005-06-15 19:58:00  No: 15621

TIdFTPならば、Abortで中断できませんか?


ごん  2005-06-16 22:14:43  No: 15622

Conncect 時は IdFTP.Abort は例外が発生したので
IdFTP.DisConnectSocket を使うと停止するみたいです。
どうもありがとうございました。


にしの  2005-06-16 22:21:56  No: 15623

その例外って、EIdConnClosedGracefullyでしょうか。
これは、「接続が正常にCloseした」という例外です。
例外=エラーではありませんよ。
ただ、Connectedプロパティが変化しないので、Disconnectする必要があると思いますが。


kkk  2005-06-16 22:53:20  No: 15624

>その例外って、EIdConnClosedGracefullyでしょうか。
>これは、「接続が正常にCloseした」という例外です。
Indyの日本語マニュアルにそういう風に記述されているせいか常に「正常終了」と勘違いされている方もいらっしゃるようですが・・・
実際にはちょっとニュアンスが違います。
http://www.swissdelphicenter.ch/en/showarticle.php?id=1


ごん  2005-06-16 23:31:36  No: 15625

勝手な解釈ですが、
「接続されていません」というようなメッセージでした。
IdFTP.Connect 時のタイムアウト待ちのときに IdFTP.Abort って
使えるのでしょうか?
いまひとつ以下の処理の違いがわかってないのかもしれません。
IdFTP.DisConnect,IdFTP.DisConnnectSocket,IdFTP.Abort


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加