Get to know MDN better
このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。
WebSocket API を使用したい場合は、サーバーを所有していると便利です。この記事では、C# で記述する方法を説明します。どんなサーバーサイドの言語でも行うことができますが、わかりやすく理解しやすいように、 Microsoft の言語を選択しました。
このサーバーは RFC 6455 に準拠しているため、Chrome バージョン 16、Firefox 11、IE 10 以上の接続のみを処理します。
WebSocket は TCP (伝送制御プロトコル) 接続を介して通信します。幸いにも、C# には TcpListener クラスがあり、その名前が示すようにします。これは System.Net.Sockets 名前空間にあります。
メモ: 書く量を減らすために名前空間を using キーワードに含めることをお勧めします。毎回完全な名前空間を入力することなく、名前空間のクラスを使用できます。
コンストラクター:
localAddr はリスナーの IP を指定し、port はポートを指定します。
メモ: string から IPAddress オブジェクトを作成するには、 IPAddress の静的メソッド Parse を使用してください。
メソッド:
ベアボーンサーバーの実装は次のとおりです。
メソッド:
プロパティ:
メソッド:
buffer からバイトを書き込み、offset と size はメッセージの長さを決定します。
buffer を読み込みます。 offset と size はメッセージの長さを決定します。
例を拡張してみましょう。
クライアントがサーバーに接続すると、単純な HTTP リクエストから WebSocket への接続をアップグレードするための GET リクエストが送信されます。これはハンドシェイクと呼ばれます。
このサンプルコードはクライアントから GET を検出できます。これは、メッセージの最初の 3 バイトが利用可能になるまでブロックされることに注意してください。運用環境では、代替ソリューションを検討する必要があります。
リクエストは簡単に作成できますが、理解するのは少し難しいかもしれません。サーバーのハンドシェイクの完全な説明は RFC 6455 の 4.2.2 項にあります。目的のために、簡単なレスポンスを作成します。
やらなければならないことは次の通りです。
ハンドシェイクが成功すると、クライアントはエンコードされたメッセージをサーバーに送信します。
"MDN" を送信すると、次のバイト列が得られます。
129 131 61 84 35 6 112 16 109これらのバイト列の意味を見てみましょう。
現在 129 の値を持つ最初のバイトは、次のように分解するビットフィールドです。
| 1 | 0 | 0 | 0 | 0x1=0001 |
現在 131 の値を持つ 2 番目のバイトは、次のように分解する別のビットフィールドです。
| 1 | 0x83=0000011 |
メモ: 最初のビットはクライアントからサーバーへのメッセージでは常に 1 なので、このバイトから 128 を引いて MASK ビットを取り除くことができます。
メッセージに MASK ビットが設定されていることに注意してください。これは次の 4 バイト (61、84、35、6) がメッセージのデコードに使用されるマスクバイトであることを意味します。これらのバイトはすべてのメッセージとともに変化します。
残りのバイトはエンコードされたメッセージペイロードです。
D_i = E_i XOR M_(i mod 4)
D は復号されたメッセージ配列、E は符号化されたメッセージ配列、M はマスクバイト配列、i はデコードするメッセージバイトの位置です。
C# の例です。
This page was last modified on 2025年9月17日 by MDN contributors.
Your blueprint for a better internet.
Visit Mozilla Corporation’s not-for-profit parent, the Mozilla Foundation.
Portions of this content are ©1998–2026 by individual mozilla.org contributors. Content available under a Creative Commons license.