VB6でWinInetを使ったFTPのアプリケーションを作成しています
FtpGetFileを実行すると応答がなくなり、タイムアウトしてしまう現象が発生しております。
タイムアウトするのですが、FtpGetFileはエラーを返さず正常終了しています。
LastDllErrorのエラーは12003を返すので詳細を見ると
227 Entering passive mode (*,*,*,*,*,*)
150 Opening ASCII mode data connection for *****.csv (1594 bytes).
226 Transfer complete.
421 Timeout (900 seconds): closing control connection.
となっています。
目的のファイルは受信フォルダに作成されています。
ただ、開いてみるとレコードの先頭1バイトだけのファイルでした。
(79****,12345,....というレコードの7だけでした)
相手FTPサーバーのテスト用のフォルダで、いろいろなパターンをテストしています。
現在わかっていることは、
FTPの転送モードはASCII,Binaryどちらでも発生します。
現象が発生するファイルは制御コードがCRFLではなく、CRのみになっている。(CRFLになっているファイルは問題なく取得できています。)
コマンドプロンプトからのFTP(FTP.exe)では問題なく取得できる。
FTPGetFile関数の問題かとも思い、FtpOpenFileとInternetReadFileを組み合わせてファイルを取得するようにしてみたのですが、InternetReadFileで同様の現象になってしまいます。
FTPサーバー側でCRLFをつけてもらえばよいのですが、FTPサーバーはアメリカで取引先のまた取引先ということなので、ファイル作成処理を修正ししていただくのは難しい状況です。
(サーバー側で何か起きていないか調査をお願いしているのですが、音沙汰無しです)
開発環境はVisualBasic6、クライアントOSはWinXP SP2です。
wininet.dllのバージョンはは6.0.2900.2180です。
ただ相手側FTPのOSは不明です。
コマンドプロンプトのFTPで接続をすると、dropbox FTP server (FileDrive-EX 2.0.1)と出ます。
この現象の回避方法など、ご存知の方いらっしゃいますでしょうか?
よろしくお願いいたします。
WinInet FTP API がエラー12003 を返す場合
http://support.microsoft.com/kb/168492/ja
「INTERNET_FLAG_PASSIVE フラグを使わないことで回避できます。」
との記述がありますか、どうなんでしょうか
返事が遅くなってしまい申し訳ありません。
やじゅ様のご指摘の件、知っていたのですがタイムアウトしてしまう現象と関係なさそうなので試していませんでした。
昨日、INTERNET_FLAG_PASSIVEフラグを使わないようにしてみたところ、今日までタイムアウトも発生せず、その他問題もなさそうです。
タイムアウトは毎回起きている現象ではない為に完全に回避できているのかわかりませんが、一応解決とさせていただきます。
ありがとうございました。
ツイート | ![]() |