FDELPHI 12 Telnet と ftp(その2) みなさん、こんにちは。 D4 Standard+Indy8 で、社内のとあるネットワーク機器の自動ログ収集ツールを 作ろうとしています。が、なんかおかしな動作になってしまい、悩んでいます。 どなたかお知恵をお貸しいただけないでしょうか。 行いたいことは、極めてシーケンシャルなものです。 1:Telnet でホストにコネクト 2:コネクトしたらユーザ名・パスワード送信 3:ログ蓄積コマンド送信 4:Telnet のセッションを維持したまま ftp でコネクト 5:ログ get 6:ftp ログアウト 7:Telnet で後始末コマンド送信 8:Telnet ログアウト 本当は Telnet でログアウトした後、改めて ftp でログインすればいいのでしょ うが、いろいろな都合でこのようになっています。 そして、以下のようなロジックにしたいと考えました。 (原案) A.Button1Click で1 B.IdTelnet1Connected で2と3と4 C.IdFTP1Connected で5と6 D.IdFTP1Disconnected で7と8 が、全然うまくいきません。 どこで止まっているのかわかりませんが、途中で止まってしまいます。 問題の切り分けのために、まず以下のようにしてみました。 (対処案1) A.Button1Click で1 B.Button2Click で2 C.Button3Click で3と4 D.Button4Click で5と6 E.Button5Click で7と8 ・・・完全にうまくいってしまっています。 1つ1つの動作には全く問題がなく、希望の動作を実現してくれました。 そこで、自動動作のため、もしかしてコマンド発行のタイミングが早すぎるので はないか、と思い、次に以下のようにしてみました。 (対処案2) A.Button1Click で1 B.IdTelnet1Connected でshowmessage('Telnet Connected')のあと2と3と4 C.IdFTP1Connected でshowmessage('FTP Connected')のあと5と6 D.IdFTP1Disconnected でshowmessage('Telnet DisConnected')のあと7と8 ・・・やっぱりうまくいきません。 どんなにタイミングをとってみても、途中で止まってしまいます。 仕方ないので、原案と対処案2を混ぜてみて、どこで止まっているのか見てみま した。すると、FTP1Disconnected の後は showmessage を削除してしまって特に タイミングをとらなくても自動動作可能なことがわかりました。 ところが、対処案2−Bでコネクトしたら Memo1.Lines に Telnet のログをとる ようにしているのに、全く何も記録されません。なのでこの場合、ログインに成 功したかわかりませんし、ログ蓄積コマンドが送れているかも不明です。 ログ蓄積コマンドが送れていなかった場合、ftp で取得できるデータはゴミデー タになってしまうのですが、データが存在しないとかにはならないので次の工程 には影響ありません。 なのですが、対処案2−Cでは、ftp が connected プロパティで確認してみても コネクトしているにもかかわらず、get メソッドはおろか list メソッドすら失 敗し、例外が発生して finally 節に落ちてしまいます。 このとき、対象のサーバに別のマシンなどからコマンドプロンプトで ftp ログイ ンし ls コマンドを投げると、ログが蓄積されていることが確認できますので、 ファイルが存在しないことによる例外ではないことは間違いありません。 たぶん、私がなにかとんでもなく重要な事を見落としているんだとは思いますが、 ちょっと煮詰まってしまい、もはや客観的に見る事ができなくなりつつあります。 大変申し訳ありませんが、どうか大所高所というか傍目八目というか、なにか気 がつかれたこととか、あるいはこういう事を試してみたらどうだ、ということが あればアドバイスをいただけないでしょうか。 なにとぞよろしくお願いいたします。                                  としき