The project of U-WA-
http://uwa.potetihouse.com/
トップページ > 過去ログ > 記事閲覧
アイコン ファイルコピー後にタイムアウト
日時: 2008/02/28 17:42
名前: ゆず

カレントディレクトリの取得に引き続きまた問題がおきました。
FTP接続後、複数のファイルを順にコピーしていきますが、ファイルコピー後にタイムアウトになってしまいます。

▼こんな感じにコーディングしました▼
'接続用の情報作成
Dim bp As New TKFP.Net.BasicFtpLogon(a_UserName, a_PassWord)
'POPクライアントクラスの定義
FtpClient = New TKFP.Net.FtpClient(bp, a_ServerName, 21)
'パッシブモードに設定
FtpClient.ConnectionMode = TKFP.Net.ConnectionModes.Passive
'リストの取得コマンドを設定
FtpClient.ListType = TKFP.Net.ListType.LIST
'取得したリスト情報の有効時間を設定
FtpClient.ListCacheValidityInterval = 60
FtpClient.FileSystemCacheValidityInterval = 60
'LIST情報の解析クラスを指定
FtpClient.ListDataLoader = New TKFP.IO.UnixListDataLoader

'モニタ表示のために送受信イベントを登録
AddHandler Me.FtpClient.MessageReceive, AddressOf Me.FtpClient_MessageReceive
AddHandler Me.FtpClient.MessageSend, AddressOf Me.FtpClient_MessageSend

'接続開始
FtpClient.Connect()

'FTP接続時のカレントパス取得
Me.m_CurrentDir = Me.FtpClient.StartPath & "/" & カレントDIR以下のパス
'作業ディレクトリの設定
CurrentDirectory = New TKFP.IO.DirectoryInfo(Me.FtpClient, Me.m_CurrentDir)
-------ここまでは問題ないです------------------------------------------------------------
-------【ここからが問題のロジックです】-----------------------------------------------------
▼以下ファイル分LOOP ※処理するファイルは複数あります
Try
  'ファイル一覧取得
Dim a_file As TKFP.IO.FileInfo
'カレントディレクトリ直下のファイルを検索し一致したらコピーする
For Each a_file In CurrentDirectory.GetFiles()
If a_file.Name = "検索対象のファイル" Then
a_file.CopyTo("コピー先パス", True)
'→コピー成功
Exit Sub
End If
Next a_file
'→ファイル無し
Catch ex As Exception
  '→処理異常
  MSGBOX(ex)
End Try

Page: 1 |

ファイル ファイルコピー後にタイムアウト(続き) ( No.1 )
日時: 2008/02/28 17:43
名前: ゆず

簡単に説明しますと、接続に関しては上半分で行い、その接続を保ちつつ、下半分の
コピー処理をどんどんやっていく流れとなっています。
コピーのファイル数は複数あり、大きさは小さいものは30MB〜大きいものは500MBくらいあります。
30MBのファイルに関しては複数あった場合も、順次コピーを正常に行えます。

問題がおきているのは170MBのファイル(500MBもNG)で、1ファイルのコピーには3〜4分かかるのですが、処理が終わった直後、エラーになります。
VB.NET内のExceptionにて取得したところ、
 「サーバーからのレスポンスがありませんでした。」
 「通信はタイムアウトしました。」
と言われますが、その対象だったファイルのコピーはされています。

下記はFTPが吐き出しているログです。
-------------------------------------------------------------------------------------
220 (vsFTPd 2.0.1)
USER QQQQQ
331 Please specify the password.
PASS ********
230 Login successful.
PWD
257 "/AA/BB/CC"
CWD /AA/BB/CC/DD/EE/
250 Directory successfully changed.
PASV
227 Entering Passive Mode (○○,○○,○○,○○,○○,○○)
LIST
150 Here comes the directory listing.
226 Directory send OK.
TYPE I
200 Switching to Binary mode.
PASV
227 Entering Passive Mode (○○,○○,○○,○○,○○,○○)
RETR FILE0001
150 Opening BINARY mode data connection for FILE0001 (180000000 bytes). ←@
PASV
PASV
PASV
QUIT
-------------------------------------------------------------------------------------

上記@のあと、正常だとおそらく下記のように処理が次のファイルに移るようなのですが..
PASV?PASV??って感じになってますが何でしょう(^^;
-------------------------------------------------------------------------------------
226 File send OK.
TYPE I
200 Switching to Binary mode.
PASV
227 Entering Passive Mode (○○,○○,○○,○○,○○,○○)
RETR FILE0003
150 Opening BINARY mode data connection for FILE0003 (30000000 bytes).
-------------------------------------------------------------------------------------

ファイルのコピー処理としては、1ファイルのみですが正常に作成されるがその直後にタイムアウトになってしまう、これを回避する方法があればご教授くださいm(__)m
ファイル Re: ファイルコピー後にタイムアウト ( No.2 )
日時: 2008/02/28 22:21
名前: Toki◆pRU.c9X.EOI

ご報告ありがとうございます

制御コネクションでの処理で、データコネクションでの通信時間が長い時にタイムアウトと判定する不具合があるかもしれませんが、まだ調査できていません。

FtpClient.TimeOutIntervalプロパティを大きめにして、タイムアウトの制限を緩和してみてください。

多分、同様の現象をテスト環境で再現できそうなので、時間が出来次第修正させていただきます。
ファイル Re: ファイルコピー後にタイムアウト ( No.3 )
日時: 2008/02/29 11:33
名前: ゆず

ご返答ありがとうございますm(__)m

>FtpClient.TimeOutIntervalプロパティを大きめにして、タイムアウトの制限を緩和してみてください。

試しに「FtpClient.TimeOutInterval=1200(20分)」で設定してリトライしてみました。
結果はほぼ変わらず、処理が返ってくる時間が20分くらい伸びただけで、VBのタイムアウトエラー、FTPのログ内容は変わらなかったです。
これは推測ですが、ファイルコピーの完了後20分経過してからVB側に処理が戻りタイムアウトエラーになっている気がします。

宜しくお願いしますm(__)m
ファイル Re: ファイルコピー後にタイムアウト ( No.4 )
日時: 2008/03/13 00:41
名前: Toki◆pRU.c9X.EOI

返信が滞っていて申し訳ありません。

引越しで、開発PC、テスト用サーバーが動かせないので、

開発環境が復旧次第、同条件でのテストと修正を行なう予定です。

もうしばらくお待ちください

Page: 1 |