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

この記事では、サーバーソケットとクライアントソケットの一連の操作を並べて説明します。 ソケットはオブジェクトを使用するので CArchive 、必ずしも ストリームソケットです。

ストリームソケット通信の一連の操作

オブジェクトを構築するまでの間 CSocketFile 、との両方に対して、次のシーケンスが正確に (パラメーターの違いがいくつか CAsyncSocket CSocket あります)、 その時点から、シーケンスはに対して厳密に CSocket なります。 次の表は、クライアントとサーバー間の通信を設定するための一連の操作を示しています。

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

サーバー Client
// 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/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 は、新しいオブジェクトを ソケット ハンドルに接続します。 ここで示したように、またはヒープ上にソケットを作成できます。

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

シーケンスに関するその他の注意事項

前の表に示す呼び出しのシーケンスは、ストリームソケット用です。 コネクションレスのデータグラムソケットは、 CAsyncSocket:: ConnectListenAccept の呼び出しを必要としません (オプションでを使用することもでき Connect ます)。 代わりに、クラスを使用している場合、 CAsyncSocket データグラムソケットは、 CAsyncSocket::SendTo ReceiveFrom メンバー関数とメンバー関数を使用します。 (データグラムソケットでを使用する場合は、 Connect とを使用し Send Receive ます)。 CArchive はデータグラムで動作しないため、 CSocket ソケットがデータグラムの場合はアーカイブでを使用しないでください。

CSocketFile は、のすべての機能をサポートしているわけではありません。 CFile CFile Seek ソケット通信には意味がないなどのメンバーは使用できません。 このため、一部の既定の MFC Serialize 関数はと互換性がありません CSocketFile 。 これは、クラスに特に当てはまり CEditView ます。 を使用してオブジェクトにアタッチされたオブジェクトを介してデータをシリアル化することは避けてください。代わりにを使用してください CEditView CArchive CSocketFile CEditView::SerializeRaw CEditView::Serialize (ドキュメント化されていません)。 SerializeRaw関数は、をサポートしていないなどの関数をファイルオブジェクトに持つことを想定してい Seek CSocketFile ます。

詳細については、次を参照してください。

関連項目

MFC における Windows ソケット
CSocket クラス
CAsyncSocket::Create
CAsyncSocket:: Close