←戻る

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サーバを作ってみることにします。

参考文献等


←戻る

Valid HTML 4.01!

Valid CSS!