Get to know MDN better
このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。
この例では、Oracle Java を使用して WebSocket API サーバーを作成する方法を示します。
他のサーバーサイドの言語を使用して WebSocket サーバーを作成することもできますが、この例では Oracle Java を使用してサンプルコードを簡略化しています。
このサーバーは RFC 6455 に準拠しているため、 Chrome バージョン 16、Firefox 11、IE 10 以降の接続のみを処理します。
WebSocket は TCP (伝送制御プロトコル) 接続を介して通信します。 Java の ServerSocket クラスは java.net パッケージにあります。
ServerSocket コンストラクターは、単一の引数 port を int 型で取ります。
ServerSocket クラスをインスタンス化すると、port 引数で指定したポート番号にバインドされます。
こちらが実装を部品に分割したものです。
指定された byte 配列からオフセット off で始まる len バイトをこの出力ストリームに書き込みます。
最大 len バイトのデータを入力ストリームからバイト配列に読み込みます。
例を拡張してみましょう。
クライアントがサーバーに接続すると、単純な HTTP リクエストから WebSocket への接続をアップグレードするための GET リクエストが送信されます。 これはハンドシェイクと呼ばれます。
このようにしなければならない理由を理解するよりも、レスポンスを作成する方が簡単です。
次のことをやらなければなりません。
ハンドシェイクが成功した後、クライアントはサーバーにメッセージを送信できますが、これはエンコードされています。
"abcdef" を送信すると、次のバイトが得られます。
129 134 167 225 225 210 198 131 130 182 194 135129:
| 1 | 0 | 0 | 0 | 0x1=0001 |
FIN: メッセージをフレームで送ることができますが、単純化します。 Opcode 0x1 はテキストであることを意味します。 Opcode の完全なリスト
2 番目のバイトから 128 を引いた値が 0 〜 125 の場合、これはメッセージの長さです。 126 の場合は、次の 2 バイト (16 ビット符号なし整数)、127 の場合、次の 8 バイト (64 ビット符号なし整数、最上位ビットは 0 でなければならない) が長さです。
メモ: 最初のビットは常に 1 なので、 128 を取ることができます。
167、225、225、および 210 はデコードするキーのバイトです。それは毎回変わります。
残りの符号化されたバイトはメッセージです。
デコードされたバイト = エンコードされたバイト XOR (エンコードされたバイトの位置 BITWISE および 0x3) バイト目のキー
Java の例です。
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.