次の方法で共有


Windows ソケット : 動作シーケンス

ここでは、サーバー ソケットとクライアント ソケットの動作シーケンスを比較しながら説明します。 ソケットは CArchive オブジェクトを使うので、ストリーム ソケットになります。

ストリーム ソケットの通信動作シーケンス

CSocketFile オブジェクトの生成までの動作シーケンスは、CAsyncSocketCSocket も、一部のパラメーターを除いて次の表のとおりです。 これ以降のシーケンスは、CSocket に対するものです。 次の表は、クライアントとサーバー間の通信の設定動作シーケンスを示したものです。

サーバーとクライアント間の通信設定シーケンス

サーバー

クライアント

// construct a socket

CSocket sockSrvr;

// construct a socket

CSocket sockClient;

// create the SOCKET

sockSrvr.Create(nPort);1,2

// create the SOCKET

sockClient.Create( );2

// start listening

sockSrvr.Listen( );

 

 

// seek a connection

sockClient.Connect(strAddr, nPort);3,4

// construct a new, empty socket

CSocket sockRecv;

// accept connection

sockSrvr.Accept( sockRecv ); 5

 

// construct file object

CSocketFile file(&sockRecv);

// construct file object

CSocketFile file(&sockClient);

// construct an archive

CArchive arIn(&file,            CArchive::load);

または

CArchive arOut(&file,           CArchive::store);

あるいは両方 

// construct an archive

CArchive arIn(&file,            CArchive::load);

または

CArchive arOut(&file,           CArchive::store);

 あるいは両方 

// use the archive to pass data:

arIn >> dwValue;

または

arOut << dwValue;6

// use the archive to pass data:

arIn >> dwValue;

または

arOut << dwValue;6

1. nPort はポート番号です。 参照してくださいWindows ソケット:ポートとソケット アドレスポートの詳細については。

2. サーバー側でそのたびにポートを指定しないと、クライアントが接続できません。 Create の呼び出しでも、アドレスを指定する場合があります。 クライアント側では、MFC が任意の空きポートを使うように既定の引パラメーター数を指定します。

3. nPort はポート番号、strAddr はマシン アドレスまたはインターネット プロトコル (IP) アドレスです。

4. マシンのアドレスは、複数のフォームを取ることができます。「ftp.microsoft.com」、「microsoft.com」。 IP アドレスには、"ドット区切り番号" 形式 ("127.54.67.32" など) を使います。 Connect 関数は、アドレスがドット区切り番号かどうかを調べます (ネットワークで有効なコンピューター番号かどうかはチェックしません)。 ドット区切り番号でない場合は、Connect はほかの形式のコンピューター名であると見なします。

5. サーバー側で Accept を呼び出すときは、新しいソケット オブジェクトへの参照を渡します。 このオブジェクトはあらかじめ生成しておく必要があります。ただし、Create は使わないでください。 このソケット オブジェクトがスコープ外に出ると、接続は閉じられます。 MFC は新しいオブジェクトを SOCKET ハンドルに接続します。 ソケットの生成位置は、スタック上でもヒープ上でもかまいません。

6. アーカイブとソケット ファイルは、スコープを出ると閉じます。 ソケット オブジェクトがスコープを出るか、または削除されると、そのオブジェクトのデストラクターが、ソケット オブジェクトの Close メンバー関数も呼び出します。

動作シーケンスに関する追加情報

前の表で示した呼び出しシーケンスは、ストリーム ソケットに対するものです。 データグラム ソケットは接続が不要なため、CAsyncSocket::ConnectListenAccept の各関数を呼び出す必要はありません。ただし、Connect は必要に応じて使うことができます。 CAsyncSocket クラスを使う場合は、データグラム ソケットで CAsyncSocket::SendToReceiveFrom の 2 つのメンバー関数を使います。 Connect をデータグラム ソケットで使う場合は、SendReceive を使います。CArchive はデータグラムとは一緒に使えません。データグラム ソケットの場合は、アーカイブ付きの CSocket を使わないでください。

CSocketFile は、すべての CFile の機能をサポートしません。Seek などの CFile メンバーはソケット通信では無意味であり、利用できません。 したがって、MFC の既定の Serialize 関数の中には、CSocketFile と一緒に使用できないものがあります。 CEditView クラスなどがその例です。 特に、CEditView のデータは、CSocketFile オブジェクトに関連付けられている CArchive オブジェクトを使って、CEditView::SerializeRawでシリアル化しないでください。代わりに、CEditView::Serialize (非公開) を使ってください。 SerializeRaw 関数は、CSocketFile がサポートしない Seek などの関数がファイル オブジェクトにあるものと想定します。

詳細については、次のトピックを参照してください。

参照

参照

CSocket クラス

CAsyncSocket::Create

CAsyncSocket::Close

概念

MFC における Windows ソケット