いろいろと情報を探してみましたが、見つかりませんでした。私は最新のビルドを使用しています: 21.0.1180.83 m.
私が取り組んでいるC++サーバーがあり、ハンドシェイクの後、Chromeに次のように送信しています: "10000001000000100110100001101001" しかし、何らかの理由でクロムは何もしていません。サーバーはデータを正しく送信しています。ビットをいじっていて、次のようなクロム エラーが発生しました。1 つ以上の予約済みビットがオンになっています: 予約済み 2 = 1、予約済み 3 = 1。つまり、クロムが正しく受信していることがわかります。
ws.onmessage = function (evt)
{
var received_msg = evt.data;
alert(received_msg);
};
私が何かを見逃していない限り、私の知る限り、それは正しいはずです...どんな助けもいただければ幸いです。
編集私は私の問題を解決しました。バイトを正しくまとめていなかったようです...
これは、修正するために一緒に切り刻んだコードの一部です...(嫌いではありません)
string construct_data ( string data ) {
string return_value = "";
/* 0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-------+-+-------------+-------------------------------+
|F|R|R|R| opcode|M| Payload len | Extended payload length |
|I|S|S|S| (4) |A| (7) | (16/64) |
|N|V|V|V| |S| | (if payload len==126/127) |
| |1|2|3| |K| | |
+-+-+-+-+-------+-+-------------+ - - - - - - - - - - - - - - - +
| Extended payload length continued, if payload len == 127 |
+ - - - - - - - - - - - - - - - +-------------------------------+
| |Masking-key, if MASK set to 1 |
+-------------------------------+-------------------------------+
| Masking-key (continued) | Payload Data |
+-------------------------------- - - - - - - - - - - - - - - - +
: Payload Data continued ... :
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
| Payload Data continued ... |
+---------------------------------------------------------------+*/
char unmasked = 129;
char size;
if ( data.size() <= 125 ) {
size = data.size();
} else if ( data.size() > 125 && data.size() <= 65535) {
size = 126;
} else if ( data.size() > 65535 ) {
size = 127;
}
stringstream it_um;
stringstream it_s;
for ( int i = 0; i < 1 ; i++ )
it_um << unmasked;
for ( int i = 0; i < 1; i++ )
it_s << size;
std::string raw_unmask;
std::string raw_size;
raw_unmask = it_um.str();
raw_size = it_s.str();
string raw_data = raw_unmask + raw_size + data;
return_value.append(raw_data);
return return_value;
}