DOBON.NET DOBON.NETプログラミング掲示板過去ログ

FTP接続について

  • 題名: FTP接続について
  • 著者: ディーゼル
  • 日時: 2010/01/14 22:56:29
  • ID: 26251
  • この記事の返信元:
    • (なし)
  • この記事への返信:
  • ツリーを表示
環境/言語:[VB.NET Framework 2.0]
分類:[.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上での接続がいまいち理解できて
おりません。

しっかりと理解をしておきたいので、内部(?)でどのようになっているのか
お教えして頂ければ幸いです。
また、上記の認識が見当違いでありました場合は申し訳ありません。

よろしくお願い致します。
こんばんは。
毎回書かれている「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行ずつステップしながらログを眺め、
どこで接続や切断が記録されるか確認するとよいと思いますよ。
ちょっと分かりにくかったかなと反省し、FTPサーバーと具体的にどのようなやりとりが行われるかの記述を追加しました。参考になれば幸いです。

http://dobon.net/vb/dotnet/internet/ftpwebrequest.html#keepalive
  • 題名: ありがとうございました!
  • 著者: ディーゼル
  • 日時: 2010/01/16 0:43:47
  • ID: 26260
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
お疲れ様です。
大変早いご返信、感謝です。

> こど。様
はじめまして。
今回は大変わかりやすいご説明、ありがとうございます。
すごく理解が深まりました。
安心してこの仕組みを使用することができます!
また、お世話になることがあると思いますがその時は
よろしくお願い致します。
ありがとうございました。

>管理人様
はじめまして。
いつも利用させて頂いています。
こちらこそ理解力のなさに申し訳なく思っている次第です。
今回はわざわざHPに追記までして頂き、ありがとうございます。
こど。様のご回答で十分に理解できていたところを
さらに理解することができました、感謝です。
困ったときはまた利用させて頂きますので、今後ともよろしくお願い致します。

こど。様、管理人様、本当にありがとうございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板