アプリ版:「スタンプのみでお礼する」機能のリリースについて

c言語で、ftpプロトコルを使用し、ftpサーバまで接続することができたまでは良かったのですが、サーバ側のファイル一覧を取得する方法(フローチャート)が分かりません。
すみませんが、ご教授よろしくお願いいたします。

A 回答 (4件)

めんどくさいのでPassive modeの場合を。


FTPはコマンドの送信とデータの受信を別々のSocketで交わします。とりあえず21/tcpに繋いでログインした後、PASVコマンドを送信してその応答を取得します。

% telnet ftp.example.jp 21
入力>USER username
入力>PASS password
入力>PASV
応答<227 Entering Passive Mode (127,0,0,1,68,89)

この際返される(127,0,0,1,68,89)の文字列をデータ送受信用に使用するアドレスとして利用します。とりあえず後ろの2つの数字を切り出して

68 * 256 + 89

して求めた数値がデータ受信用のポート番号です。このポート番号に新たにSocketを張っておいて、最初に繋いでおいた21/tcpのSocketでLIST, NLSTなどなどのデータ受信用のコマンドを叩くと、後からはったもう一方のソケットにその応答が帰ってきます。

大雑把ですがこんな感じです。telnetコマンドでこの流れを試すことができますので、とりあえずやってみるとよいかと思います。

この回答への補足

ありがとうございます。
passive modeではなく、Activeで、LISTなどを送信しましたら、問題なくファイル一覧が表示されました。
ただ、言われたようにtelnetコマンドで使用いたしました。LISTやCDWなどは動作確認いたしましたが、データのダウンロード時(get)に、パーミッションエラーが表示されたのは何故なのですか?
ユーザーやグループをftpなどに変更する必要があるのですか?

補足日時:2003/05/20 14:34
    • good
    • 0

コマンドラインftpが使える環境であればデバッグモードで起動してください。


クライアント/サーバー間のすべてのやりとりが表示されます。

この回答への補足

やってみます。
あと、すみませんが、お薦めの参考書など教えていただけないでしょうか?

補足日時:2003/05/20 15:43
    • good
    • 0

ネットワーク関連のプログラムを組まれるのでしたら、できればRFCを読まれたほうがいいと思います。


応答コードなどはうんざりするぐらい定義されています
http://www.wu-ftpd.org/rfc/

一部は日本語に翻訳されています。
http://www.mars.dti.ne.jp/~torao/rfc/
http://www.se.hiroshima-u.ac.jp/~isaki/rfc/list. …

現在のFTPのコアな部分は959/1123で定義されているようです。


プロトコルの解説についてはこちらが参考になるでしょうか。
http://x68000.startshop.co.jp/~68user/net/ftp-1. …

同サイトにソケットを直に使ったC言語のサンプルプログラムもあります。
http://x68000.startshop.co.jp/~68user/net/c-ftp- …

Activeモードでなら、PORTコマンドで自IPとポートをサーバに送って、サーバからそのポートに接続があるのを待ち受ける形になるはずです。
    • good
    • 0
この回答へのお礼

やはりRFCをよく読んだほうがいいということですね。肝に銘じておきます。

ただ、現状ではネットで記述部分の大半を調べているのですが、ネットワークやソケット関係の関数をまだ把握していない部分があります。そのために何参考になる参考書と思ったのですが。
この考え方は間違いでしょうか?

お礼日時:2003/05/20 21:20

本気でネットワークプログラミングをするなら「インターネットRFC辞典(ASCII)」と「増補版」は必須です。


http://www.amazon.co.jp/exec/obidos/ASIN/4756118 …
http://www.amazon.co.jp/exec/obidos/ASIN/4756140 …

ネット上に転がっているRFC和訳は「個人の趣味」や「ボランティア精神」での公開なので、仕事の資料としては不安です。

ネットワークAPIについては機種/OSがわからないと何ともいえません。
Windowsと仮定すると「WinSock2.0プログラミング―Window Socket APIによるネットワークプログラミングのすべて(ソフトバンクパブリッシング)」がよいかと思われます。
http://www.amazon.co.jp/exec/obidos/ASIN/4797306 …
    • good
    • 0
この回答へのお礼

ありがとうございます。
情報が不足して申し訳ありませんが、開発環境のOSはlinux、gccで開発しております。

お礼日時:2003/05/21 11:11

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!