MS VC++ 4.0 のソケットクラスについて
(c) Copyright 1996, Hirofumi Fujii
LastUpdate: 16-May-1996 (1st draft 15-May-1996)
E-mail:keibun@onlnews.kek.jp
MS VC++ 4.0 では Windows Sockets を扱うためのクラス
CSocket と CAsyncSocket が用意された。
CSocket は MFC のアプリケーション同士で使用することが
前提となっていて、汎用(例えば Unix 相手とか)には
CAsyncSocket を使う。
使用法は基本的には
- Constructor により空 Socket を持つ Object を生成する。
- Member 関数 Create を呼び出し、Socket を生成する。
- Member 関数 Connect を呼び出し、Connection を確立する。
- Member 関数 OnConnect により、Connection 確立時の
初期化を行う。
- Member 関数 OnReceive により、受信データの到達に伴う
処理を行う。
これらのことから、通常の TCP/IP の socket (Stream 型)に
対して MS VC++ では、次のようにするのが一般的であると
思われる。
- CAsyncSocket は CDocument と関連付ける(CView とは
直接関連付けない)。
- Socket に割り込み( OnXXX ) がかかった場合、
Document を update し、CDocument 経由で View を更新。
(UpdateAllViews)。
- View からの変更(Key 入力など)は CDocument 経由で
CAsyncSocket::Send() (必ずしも Document を変更する
必要はない)。
また CAsyncSocket を使う場合の具体的な生成手続きの例を
示す。
- CAsyncSocket から例えば CMySock を派生させる。
- CMySock の constructor は DocumentClass の Object から
呼び出すものとする。
- CMySock の member 変数として、呼び出した Object への
pointer を保持しておくための変数、例えば m_pDoc を用意
する。
- アプリケーションの DocumentClass 内に、CMySock* の
member 変数、例えば m_pSocket を用意する。
- DocumentClass が生成された時、CMySock の object を
new で生成し、その pointer を上記 DocumentClass の
member 変数に設定する。
- 同時に、CMySock の member 変数として、CMySock の
Constructor を呼び出した Object への pointer を設定する。
これは基本的には DocumentClass の object への pointer 。
- こうして生成された CMySock の object は空の socket
を持っているので、CMySock::Create() を使って BSD socket
の意味での socket を生成する。