ACEを使ったネットワークプログラミング
簡単なHTTPクライアント
ほな、いくで
さて、無事インストールすることができたなら、その次はやっぱり簡単なサンプルプログラムを書いてみるというのが世の習い(?)でしょう。
というわけで今回は、「C++ネットワークプログラミング」にも最初にサンプルとしてでてきた、極めて簡素なHTTPクライアントをACEを使って作ってみましょう。
先にプログラム全体を見てみましょう[->ace_httpc.cpp]。
実質10行程度の内容なのでそうそう理解に苦しむところはないと思いますが、一応解説をば...
- 10〜12行目
- aceの機能を使うためのヘッダをインクルード。ACEではヘッダファイルがそのままマニュアルになってるので、なかなか便利です。
- 13行目
- C++STLのstringヘッダです。STLがあまりお好きでない方なC-nativeなcharの配列に置き換えてください。
- 15行目
- 言わずと知れたエントリポイントmain。ただ、ACEではこの形式(int main(int, char**))でないとエラーになるので必要なくても書いておくように。
- 18行目
- このプログラムでGETしてくるファイルのパス。第一コマンドライン引数で指定する。指定がなければ'/index.html'になる。
-
- 20行目
- GETしてくるサーバのアドレス。第二コマンドライン引数で指定する。指定がなければ'www.yahoo.co.jp'。(^^;
- 22行目
- ACE_SOCK_Connector は能動的接続(要するにクライアント側からの接続)をつかさどるクラス。ほんとに接続しかしてくれません(w
- 23行目
- ACE_SOCK_Stream は接続後のデータのやり取りを受け持つクラスです。クライアントは最低ConnectorとStream(かDgram)の二つで実装されます。
- 24行目
- ACE_INET_Addr はネイティブのsockaddr系構造体のラッパです。ネットワークバイト順への変更も勝手にやってくれます。
- 27〜38行目
- コード中のコメントで十分だと思うので、あえてここには書きません。
- 41〜43行目
- charの配列を使ってるのはACEの仕様のせいです(;_;。また、ACE::write_n()を使うと効率よく書き込み(今回の場合は標準出力へ出力)できるそうです。ちなみに、write_nが定義されてるのはace/ACE.hです。
-
- 46行目
- これも特に説明なし
。。。ちゃんと望み通りの結果が得られたでしょうか?余談ながら使用OSの文字コードの違いによって、GETしてきたページの中身が文字化けしてるかもしれませんが、それはバグではなく仕様なので、悪しからず…。
次回は、「C++ネットワークプログラミング」のチュートリアルにしたがって、GETコマンドにしか対応しない極簡素なHTTPサーバを作ってみることにします。
参考文献等