- PR -

VC#によるFTPクライアントソフトの作成について質問

1
投票結果総投票数:4
ftp 1 25.00%
windows 3 75.00%
  • 投票は恣意的に行われます。統計的な調査と異なり、投票データの正確性や標本の代表性は保証されません。
  • 投票結果の正当性や公平性について、@ITは一切保証も関与もいたしません。
投稿者投稿内容
わん
会議室デビュー日: 2007/02/11
投稿数: 9
投稿日時: 2007-07-20 23:11
こんばんわ
新人エンジニアの「わん」と申します。

今、仕事でFTPクライアントのクラスを作成しなければならない状況です。
言語はC#を使用しております。
(開発環境が.net framework1.1なのでFTPをサポートしておりません)

FTPクライアントのクラスでは、既に
ログイン(USER・PASS)、カレント移動(CWD)、パッシブ(PASV)等のコマンドや
ファイル転送の送受信(STOR・RETR)が動作しているのですが、
どうしてもファイルリスト取得(NLST)が正常に動作しません。

ファイルリスト取得のプログラムの動きとしては、以下のようになっています。



----------------------------------------------------

(...ログイン後とする)

@転送モードの変更(コントロールコネクション使用)
コマンド送信"TYPE A\n"
レスポンス受信OK

Aパッシブモードに変更(コントロールコネクション使用)
コマンド送信"PASV \n"
レスポンス受信OK

Bデータコネクション作成
データコネクションでコネクトOK

Cファイルリスト受信(コントロールコネクション使用)
コマンド送信"NLST \n"
レスポンス受信OK

Dファイルリストのデータ受信(データコネクション使用)

Eデータコネクションの解放

F終了処理?(コントロールコネクション使用)
コマンド送信""
レスポンス受信NG


--------------------------------------------------------


元々は、他の方が作成したクラスを改造(機能追加)しているので、
Fは自分では理解できていません。
同時にレスポンスがNG(レスポンスが返ってこない)
データ自体(ここではファイルリストのデータ)は正常に取得できています。

ちなみに上記処理のCDは多少変わりますが、
ファイル転送の送受信機能もほぼ同じ形です。
この2つはFも正常に動作しています。





どなたか、悪い点などありましたらご教授ください
(日本語でもプログラムでもかまいません)。
その他にもサンプルコードの場所などでも教えていただけたらと思います。

以上です。
よろしくお願いいたします。

未記入
会議室デビュー日: 2007/07/21
投稿数: 1
投稿日時: 2007-07-21 01:32
引用:

わんさんの書き込み (2007-07-20 23:11) より:
こんばんわ
新人エンジニアの「わん」と申します。

今、仕事でFTPクライアントのクラスを作成しなければならない状況です。

〜〜〜〜〜 中略 〜〜〜〜〜

どなたか、悪い点などありましたらご教授ください
(日本語でもプログラムでもかまいません)。
その他にもサンプルコードの場所などでも教えていただけたらと思います。

以上です。
よろしくお願いいたします。





これを動くようにするのが、あなたの仕事だと思いますが如何でしょうか?
それとも、仕事の依頼をされているのでしょうか?
新人さんとの事ですので、料金の方は勉強させていただきますよ。
一日あたり一万でどうでしょうか?
れい
ぬし
会議室デビュー日: 2005/11/01
投稿数: 346
投稿日時: 2007-07-21 01:46
引用:

わんさんの書き込み (2007-07-20 23:11) より:
どなたか、悪い点などありましたらご教授ください



その情報だけでは何がしたいのかもわかりません。
エラーの内容もソースコードもありませんし、

>同時にレスポンスがNG(レスポンスが返ってこない)
>データ自体(ここではファイルリストのデータ)は正常に取得できています。

リクエストをおくってないならレスポンスも返ってこないでしょう
データを取得できてるならNLSTは正常に動作してるんですよねぇ?

引用:

その他にもサンプルコードの場所などでも教えていただけたらと思います。



検索してみたらいいのでは?
甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2007-07-21 09:29
通信ログも、エラーログも、パケットのキャプチャも、エラーコードも、ソースコードも分からない状態で、不具合の原因を尋ねられても解決は無理。逆に言えば、それらを一つ一つあたって、原因を絞っていくのがあなたの仕事ですよ。

通信が意図したとおりに動いていないいとき、わたしは真っ先に通信内容をキャプチャして解析しますけどね。
TAD
ベテラン
会議室デビュー日: 2007/03/20
投稿数: 52
お住まい・勤務地: 海のそば
投稿日時: 2007-07-21 21:09
とりあえず、"FTP RFC"あたりをキーに検索してFTPとはどういう動作をするものなのか
確認してはいかがでしょう。
わん
会議室デビュー日: 2007/02/11
投稿数: 9
投稿日時: 2007-07-22 13:39
皆様、回答を頂きありがとうございます。

実は先日、自力で解決いたしました。
原因としては、
ファイル転送の受信(RETR)とリスト取得(NLST)は、
Fが不要だったというものでした。→シーケンスの間違い


私の質問が言葉足らずで色々誤解を招いたようですね。
申し訳ありません。

質問したかったのは、
FTPという公式のプロトコルの
『通信シーケンスでのレベルの成否』
だったのでパケットの流れが云々という以前の話です。
ですのでソースも載せませんでした。

自作したことがある方(で記憶力が良い人)なら
私の書いたシーケンスを見て、不具合がすぐに
わかるorシーケンスが載っているサイトを示してくれる、
と思い記載したという事です。

それと興味本位での調査なら時間をかけてでも
自分で解決しますが、仕事ですので開発期間が設けられています。
しかもFTPクラス作成がメインの仕事ではなく、
メインの処理の一部がFTPを使用するから必要だっただけなので、
不明瞭でいつ終わるかわからない問題に時間をかけられず、
解り難い質問をしてしまったようです。
自力で解決したためFTPだけで1.5日ほど進捗が遅れました(T△T)


>TADさん
一番初めに、RFCでの確認はしました。もちろん日本語のほうです^^
最初にRFCを参照し、
ファイル転送の送受信(RETR、STOR)とリスト取得(NLST)は、
同じ状態図(シーケンス?)のグループだったので、
ファイル転送の送信(STOR:Fが必要)と同じシーケンスのはずだ、
と思っていたのが間違いのきっかけだったようです。



何はともあれ解決したので良かったです。
ありがとうございました。
以上です。
1

スキルアップ/キャリアアップ(JOB@IT)