|
FTPクライアントを作る1
これから何回かに分けてFTPクライアントのプログラムを作っていきたいと思います。FTPというのはファイル転送プロトコル(File Transfer Protocol)のことで、コンピュータ間でファイルを送受信するのに広く使われています。
作るものは次のようなソフトです。

・指定したサーバにユーザ、パスワードを指定して接続、切断
・ファイルリストの取得、表示、ディレクトリの移動
・ファイルのアップロード、ダウンロード
・ディレクトリの作成、削除、ファイル削除、ファイル名変更
・ファイル内容の表示
といった、FTPの基本機能をフルに備えたものを作ってしまいます。これだけでFTPクライアントとして十分使えるものになっています。こんな本格的なアプリでもMFCのFTPクラスを使えば比較的簡単に作ることができます。
では、まずはユーザインターフェースから作成していきましょう。ダイアログベースでプロジェクトを作成し、次のようなダイアログを作ります。

操作するのはボタンとエディットボックス、リストボックスだけなので難しいことはないですね。この辺のコントロールについては「ボタンの基本」「エディットボックスの基本」「リストボックスの基本」も参照してください。
パスワードのエディットボックスは、「Password」を「True」にしておきます。こうするとエディットボックスに入力された文字列がアスタリスク表示になります。
では次にいつもどおりコントロールにDDX変数を追加していきます。追加した変数は次のようになります。
| アクセス |
タイプ |
データ型 |
変数名 |
| private |
value |
CString |
m_xvEditServer |
| private |
value |
CString |
m_xvEditUser |
| private |
value |
CString |
m_xvEditPass |
| private |
value |
CString |
m_xvEditCurDir |
| private |
control |
CListBox |
m_xcList |
各ボタンには、それぞれBN_CLICKEDのイベントハンドラを追加していきます。イベントハンドラの追加でもいいですが、ボタンをダブルクリックしても追加できます。
これでスケルトンが出来上がりました。あとはコードをサクサクと実装していくのみです。
それでは、実装の前にMFCのFTPクラスについて少し解説しておきましょう。MFCではHTTP、FTP、Gopherの3つのプロトコルを同じ方法で扱えるようなクラスが用意されています。とはいってもこの3つのプロトコルは中身は全く違います。「全く違うものをなるべく同じように扱えるようにした」といったほうが正解かもしれません。
まず、親になるのがCInternetSessionというクラスです。これがプロトコルによらず、接続と切断を管理しています。FTPの操作をしたい場合は、CInternetSession::GetFtpConnection()関数を呼び出します。FTPサーバへの接続がうまくいけば、CFtpConnectionというクラスへのポインタが返ります。FTPの操作はこのクラスの関数を使って行います。終了したら、CInternetSession::Close()関数を呼び出すか、CInternetSessionクラスのオブジェクトを破棄すれば切断されます。
基本的なプログラムの流れは、
1.CInternetSessionクラスのオブジェクトを作成する。
2.CInternetSession::GetFtpConnection()関数でFTP接続する。
3.CFtpConnectionクラスを使ってFTPのいろいろな操作をする。
4.CInternetSessionクラスのオブジェクトを破棄して切断。
といったところです。これがHTTPになると、GetFtpConnection()がGetHttpConnection()に、CFtpConnectionクラスがCHttpConnectionクラスに変わるだけです。プログラムにすれば核になる部分は結局はたった数行でできてしまいます。
これがMFCの便利クラスを使わないで自前で実装しようとすると、FTPのコマンドの送受信やデータ転送をソケットを使ってコツコツと作っていかないといけなくなります。プロトコルの中身の知識も必要になってくるので相当大変です。管理人はそういうのも作ったことがあるので、MFCは便利だなぁ〜と改めて思います。
ちなみにMFCのクラスでできるのはFTPクライアントだけです。FTPサーバを作りたいと思ったら、やっぱり自前でコツコツと作るしかありません。
では、CInternetSessionクラスとCFtpConnectionクラスのオブジェクトのポインタをダイアログのメンバ変数に追加しておきましょう。これらは動的に生成、破棄されるのでポインタで持っておきます。
CInternetSession *m_iSessionP;
CFtpConnection *m_ftpConP;
|
次回からはコードを実装していきます。
|