私自身のWebSocket Serverを作成しようとしています。JavaでWebSocketからメッセージをデコードする
マイJavaScriptクライアントがonOpen
と現在反応するので、私は握手が有効であると だと思う:)私はいくつかのフレームワークが、このためにそこにあることを知っているが、私は勉強したいと思いますので、私は自分自身でそれを行います接続が確立されます。
今問題:
私のJavaサーバはチャンネルで読み取るためのセレクター・スレッドを使用しています。
クライアントのWebSocketオブジェクトで*.send("test message")
を実行した場合、サーバーはバイト配列をデコードできません。
私は使用されているエンコード/デコード技術についての情報がないため、デコードするために多くのバージョンを試しました。
例えば:
new String(Base64.decodeBase64(buffer.array()))
または
Charset set = Charset.forName("UTF-8");
new String(Base64.decodeBase64(set.decode(buffer).toString()))
メッセージが完全にByteBufferのチャンネルから読み込まれるので、私は、これは問題ではないと思います。
誰でも手伝ってもらえますか?
大丈夫この投稿はクライアントにデータを送信するのに役立ちます。これは、作品罰金:)
しかし、私は私は、サーバーが7バイトを受信
socket.send("x");
一つだけの手紙送るクライアントでクライアント:(
から受信したデータをデコードする方法を理解していませんか? ??
ByteBuffer buffer = ByteBuffer.allocate(8192);
int read = client.getInputStream().read(buffer2.array());
System.out.println("read: " + read);
// read: 7
for (int i = 0; i < read; i++) {
int j = buffer.get(i) & 0xff;
System.out.println("i: " + i + " => " + j + "=>" + new BigInteger(j + "").toString(2));
}
//i: 0 => 129=>10000001
//i: 1 => 129=>10000001
//i: 2 => 195=>11000011
//i: 3 => 235=>11101011
//i: 4 => 4=>100
//i: 5 => 96=>1100000
//i: 6 => 187=>10111011
私はこの
secondByte AND 0111 1111
を行う場合
(i:1)の結果は "1"です。これは、1バイトのデータしかないと思います。それではなぜ7歳ですか?あなたの第二の問題については
デコードアルゴリズムについては、http://stackoverflow.com/questions/8125507/how-can-i-send-and-receive-websocket-messages-on-the-server-side/8125509#8125509をご覧ください。 。 – pimvdb