- 題名: FTP接続について
- 日時: 2010/01/14 22:56:29
- ID: 26251
- この記事の返信元:
- (なし)
- この記事への返信:
- [26253] Re[1]: FTP接続について2010/01/15 0:41:24
- ツリーを表示
こんばんは。 毎回書かれている「ftpReq.Credentials = Me.ftpCredential」の時点で 接続を実行するわけではありません。 新しいftpReq(使いまわせないので。)のCredentialsプロパティに 既存のCredentialオブジェクトをセットするだけの準備処理です。 接続や認証等の実際の処理は、ftpReq.GetResponse()の要求時に『必要であれば』行われます。 (それまでに各種プロパティを準備・設定すればよいということになります。) 参考URLでのどぼんさんのサンプルでボタンクリックをした際の処理で流れを説明すると (※サーバから自動的に切られていないきれいなルートの前提ですが、) ●同じ認証用オブジェクトかつkeepaliveの場合─ 認証用オブジェクトを生成 ftpReq.GetResponse()でリスト要求 [1]接続・認証 [2]リスト取得 リストの結果でループ ftpReq.GetResponse()でディレクトリ削除要求 [1]ディレクトリ削除 ループ終わり keepaliveをオフにしておく ftpReq.GetResponse() [1]捨てコマンド(PWD)を実行する [2]切断 ●同じ認証用オブジェクトでないかkeepaliveがオフの場合─ 認証用オブジェクトを生成 ftpReq.GetResponse()でリスト要求 [1]接続・認証 [2]リスト取得 [3]切断 リストの結果でループ ftpReq.GetResponse()でディレクトリ削除要求 [1]接続・認証 [2]ディレクトリ削除 [3]切断 ループ終わり keepaliveをオフにしておく ftpReq.GetResponse() [1]接続・認証 [2]捨てコマンド(PWD)を実行 [3]切断 という感じに動作します。 (なお見ての通りですがkeepaliveを使わないなら最後にPWDする必要はありません。) 実際の動作を見たい場合は、 (ほぼ)リアルタイムにログを見られる適当なFTPサーバソフトに接続して、 プログラムをデバッグ実行で1行ずつステップしながらログを眺め、 どこで接続や切断が記録されるか確認するとよいと思いますよ。
分類:[.NET]
はじめまして、よろしくお願いします。
FTPの接続について質問があります。
こちらのHPでもありますように「一度の接続で複数のコマンドを送信する」
(http://dobon.net/vb/dotnet/internet/ftpwebrequest.html#keepalive)
で1度の接続という箇所がいまいち理解できておりません。
HPの例より
Dim ftpReq As System.Net.FtpWebRequest = _
DirectCast(System.Net.WebRequest.Create(fileUri),
System.Net.FtpWebRequest)
If Me.ftpCredential IsNot Nothing Then
ftpReq.Credentials = Me.ftpCredential
End If
@リストの取得
Aファイルの削除
と上記のコードが両方に書かれていると思います。
>ftpReq.Credentials = Me.ftpCredential
で接続をしているという認識なのですが、これが毎回書かれているため
IDとPWを毎回送って接続しているという感じがして1度というのが
理解できておりません。
>ftpReq.KeepAlive = False
で切断しているんだというのは分かっております。
1度の接続というのがコマンドプロンプトのFTPで最初にIDとPWを送って
接続というのをイメージしているため、VB上での接続がいまいち理解できて
おりません。
しっかりと理解をしておきたいので、内部(?)でどのようになっているのか
お教えして頂ければ幸いです。
また、上記の認識が見当違いでありました場合は申し訳ありません。
よろしくお願い致します。