Winsock の概要

このセクションは、Windows ソケット プログラミングの概要に関する詳細なガイドです。 これは、基本的な Winsock 関数とデータ構造、およびそれらがどのように連携するかを理解できるように設計されています。

このトピックで説明するために使用するクライアントおよびサーバー アプリケーションは、非常に基本的なクライアントとサーバーです。 Microsoft Windows Software Development Kit (SDK) に含まれるサンプルには、より高度なコード例が含まれています。

最初のいくつかの手順は、クライアント アプリケーションとサーバー アプリケーションの両方で同じです。

次の記事では、Winsock クライアント アプリケーションを作成するための残りの手順について説明します。

次の記事では、Winsock サーバー アプリケーションを作成するための残りの手順について説明します。

これらの基本的な例の完全なソース コード。

Advanced Winsock サンプル アプリ

GitHub では、より高度な Winsock クライアントとサーバーのサンプル アプリ がいくつか用意されています。 これらは、パフォーマンスの向上と低い順にここに記載されており、次のディレクトリにあります。

  • iocp

    このフォルダーには、I/O 完了ポートを使用する 3 つのサンプル プログラムが含まれています。 プログラムには、WSAAccept 関数を使用する Winsock サーバー、iocpserverAcceptEx 関数を使用する Winsock サーバー、iocpserverexおよびこれらのサーバーのいずれかをテストするために使用される単純なマルチスレッド Winsock クライアントiocpclientが含まれます。

    サーバー プログラムは、TCP/IP を使用して接続し、サーバーがクライアントにエコーバックする任意のサイズのデータ バッファーを送信する複数のクライアントをサポートします。 便宜上、単純なクライアント プログラム である は、接続し、 iocpclient複数のスレッドを使用してデータをサーバーに継続的に送信するために開発されました。 I/O 入力候補ポートを使用する Winsock サーバーは、最高のパフォーマンスを提供します。

  • 重複

    このフォルダーには、重複した I/O を使用するサンプル サーバー プログラムが含まれています。 サンプル プログラムでは 、AcceptEx 関数と重複した I/O を使用して、クライアントからの複数の非同期接続要求を効果的に処理します。 サーバーは AcceptEx 関数を使用して、シングルスレッド Win32 アプリケーションで異なるクライアント接続を多重化します。 重複した I/O を使用すると、スケーラビリティが向上します。

  • WSAPoll

    このフォルダーには、 WSAPoll 関数の使用を示す基本的なサンプル プログラムが含まれています。 クライアントとサーバーの組み合わせプログラムは非ブロックであり、 WSAPoll 関数を使用して、ブロックなしで送受信できるタイミングを判断します。 このサンプルは例示用であり、高性能サーバーではありません。

  • simple

    このフォルダーには、サーバーによる複数のスレッドの使用を示す 3 つの基本的なサンプル プログラムが含まれています。 プログラムには、単純な TCP/UDP サーバー、simplesおよび複数のクライアント要求をサポートするために Win32 コンソール アプリケーションの select 関数を使用する TCP 専用サーバーsimples_ioctlsimplecおよびサーバーをテストするためのクライアント TCP/UDP プログラムが含まれます。 サーバーは、複数のスレッドを使用して複数のクライアント要求を処理する方法を示しています。 クライアント要求ごとに個別のスレッドが作成されるため、このメソッドにはスケーラビリティの問題があります。

  • accept

    このフォルダーには、基本的なサンプル サーバーとクライアント プログラムが含まれています。 サーバーでは、 select 関数を使用した非ブロッキング 受け入れ、または WSAAsyncSelect 関数を使用した非同期受け入れの使用を示します。 このサンプルは例示用であり、高性能サーバーではありません。