TCP ストリーム

今日は,ソケットプログラミング関連の話題.

TCP ストリーム用のソケットを使ってデータ通信を行う場合,ソケットを生成してBINDして・・・などと実際に通信を始めるまでにそれなりに手順があります.しかし,コードを書くたびにその手順をイチイチ書くのは面倒なのでラッパクラスを書こうと思い立ちました.それで,他の人はどんな感じで書いてるのかなーとgoogle先生に聞いてみたところ,namespace gmiteというサイトに行き着きました.このサイトの方は,C++ のストリームクラスで TCP のデータ通信をラッピングしていて,ユーザ側からは std::cin や std::cout と同じ感覚でデータ通信ができるようになっています.これに非常にインスパイヤされたので:p,この方法をパクってラッパクラスを書いてみようと思います.

作成したクラスは,実際にデータ通信を行う際に使用する tcpstream クラスと tcpserver, tcpclient クラス.上のサイトの方は,コネクションの確立から実際のデータ通信までをひとつのクラスにまとめていましたが,私は単純にするため分けてみました.

使い方としては,まず tcpserver, tcpclient クラスで通信可能なソケットを取得します(tcpserver なら accept() メソッド,tcpclient なら connect() メソッドの返り値).そして,そのソケットで tcpstream を初期化します(tcpstram sst(sock) みたいに).そうすると,その後は通常の std::cin, std::cout と同じ感覚で TCP 通信を行えるようになります.今の所UNIX系標準のソケットにしか対応していません.winsockについてはそのうち.

C++ のストリームの仕組みも少し理解できたので,良かったかなと.