WebSocket Server
私はC++で小さなものを書き始めました。を使用してUbuntu
います。サーバーは着信接続をリッスンします。接続が確立されると、ブラウザーはサーバーに WebSocket ヘッダーを送信します。これには、 でハッシュされた が含まれSec-WebSocket-Key
ており、残りのヘッダーと同様にブラウザーに送り返されます。これにより、ブラウザーとサーバー間の WebSocket 接続が開かれます。SHA-1
base64 encoded
Sec-WebSocket-Accept
データ フレーミングに関する仕様の一部を読み、サーバーからブラウザにデータを送信しようとしています。以下は私のコードです:
cout << "sending data..." << endl;
uint8_t to_send[8];
to_send[0] = (uint8_t)129; // 10000001
to_send[1] = (uint8_t)6; // 00000110
to_send[2] = 'h';
to_send[3] = 'e';
to_send[4] = 'l';
to_send[5] = 'l';
to_send[6] = 'o';
to_send[7] = '\0'; // 00000000
int bytesSent = send(i, &to_send, 8, 0);
cout << "bytes sent: " << bytesSent << endl;
「fin」ビット、3 つの予約済みビット、およびテキスト フレームのオペコード「0001」が最初のバイトを構成します。2 番目のバイトは、送信するテキストの長さです。文字列「hello」の後にヌル エスケープ文字が続きます。デバッグ用の私の JavaScript コードは次のとおりです。
ws.onopen = function()
{
alert("WebSocket connection open");
}
ws.onmessage = function(event)
{
alert("Data has been received");
}
サーバーが 8 バイトを送信した後、ブラウザからデータが受信されたことを示すアラートが表示されると思いますが、そうではありません。クロムとファイアフォックスでテストしました。
誰かが私が間違っているところを見ることができますか?