- - PR -
VB6.0 FTPの後処理について
1
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-03-02 14:05
FTPの後処理について気になることがあります。
あちらこちらのHPで調べた 1、InternetOpen 2、InternetConnect 3、FtpGetFile 4、2のInternetCloseHandle 5、1のInternetCloseHandle と処理しております。 そのあと、アプリケーションを終了すると、すぐに終了せず、 何か処理をしているみたいです。(約1分ぐらい・・・) FTPの手順が間違っているのでしょうか。 また、終了しない原因は何かあるのでしょうか。 ご存知の方、また、気づいた点がおありの方、 ご教授お願い致します。 | ||||||||||||
|
投稿日時: 2006-03-02 14:18
いえ、間違っていないと思います。
InternetCloseHandle 関数の戻り値は TRUE になってますよね? 大きなファイルを FtpGetFile しない限りは、待たされないと思います。 (FtpGetFile 関数って非同期でしたっけ?) _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2006-03-02 14:29
じゃんぬねっとさん返信ありがとうございます。
戻り値は「true」になってます。 しかも、試してみたところ、 1、InternetOpen 2、InternetConnect 3、2のInternetCloseHandle 4、1のInternetCloseHandle FtpGetFileをしない場合の上記の処理でも終了に時間がかかります。 3,4のInternetCloseHandleで時間がかかるわけではなく 画面で、Unload Meとした後に、アプリケーションがすぐに終わらない状態なのです。 環境が悪いのか、仕様なのか・・・(調べても同じ状況の方はみつかりませんでしたが・・・) Exeで実行すると、分かりにくいのですが、VisualStudio VBでデバックすると VisualStudioが固まってしまう感じなのです・・・・ | ||||||||||||
|
投稿日時: 2006-03-02 14:56
基本的なことを聞くようで申し訳ないのですが、 1 〜 4 全部を撤去するとすぐ終了するということですか? であれば、FTP 周りの処理が原因であることが確定しますが。(念のための確認です) 私の方でも試してみようと思いますので、問題のない範囲のソースをください。 (接続する URL は伏せてください) _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2006-03-02 15:20
じゃんぬねっとさま親切にありがとうございます。
ソースです Public Const INTERNET_DEFAULT_FTP_PORT = 21 Public Const INTERNET_OPEN_TYPE_PRECONFIG = 0 Public Const INTERNET_SERVICE_FTP = 1 Public Const INTERNET_NO_CALLBACK = 0 private function FTPtest() Dim hInternet As Long Dim hFTP As Long Dim mb As Boolean Do hInternet = InternetOpen(vbNullString,INTERNET_OPEN_TYPE_PRECONFIG,vbNullString, vbNullString, 0&) If hInternet = 0& Then Exit Do End If hFTP = InternetConnect(hInternet, "[サーバ名]", INTERNET_DEFAULT_FTP_PORT, "[ユーザ名]", "[パスワード]", INTERNET_SERVICE_FTP,0, INTERNET_NO_CALLBACK) If hFTP = 0& Then Exit Do End If Loop While False If hFTP <> 0 Then mb = InternetCloseHandle(hFTP) End If If hInternet <> 0 Then mb = InternetCloseHandle(hInternet) End If end function FTP接続の確立を行わないと、終了はすばやく終わります。 また、上記処理を行わない場合も終了はすばやく終わります。 試していただけるなんて、すみません。。。 | ||||||||||||
|
投稿日時: 2006-03-02 16:04
試してみましたが、問題なくすぐ終了しますね。 関係ないところですが、
こんな面倒な実装をしなくても、Exit Function で処理を抜けるべきだと思います。 hFTP まで制御が移った場合は、hInternet のハンドルのみ Close して終了します。 ここに、Do 〜 Loop を使っていると While False とはいえ何か怖いです。(^-^;) 実害はないんですが、読み手はループ処理だと錯覚しますよ。
戻り値は Boolean ではなく Long ですよ。 で、問題となる原因が不明ですね... 現在は FTPtest メソッドのみを実行してテストしているんですよね? 他に派生してどこかのメソッドを呼び出したりはしていませんよね? 基本的な確認ばかりで申し訳ありません。 ただ、以上に上げたようなミニマムテストをしているのならば、 原因はサーバ側にあるんじゃないかなんて考えてしまいます... 別のホストで試して頂けませんか? _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2006-03-02 16:31
じゃんぬねっとさま 試していただきありがとうございます。
サーバ側の問題ではとの指摘を受け、ユーザ名「anonymous」(デフォルト?)で いままで、ログインしていたのを新しくユーザを作成し、実行してみましたところ 無事に難なく動きました。 使用しているユーザがまずかったようです。 お手数をお掛けし、申し訳ありません。 また、コーディングの指摘についてもありがとうございます。 今後は気をつけていきたいと思います。 ていねいにありがとうございました。 |
1