我試圖編寫自己的WebSocket服務器。解碼來自WebSocket與Java的「發送」消息
我知道有一些這方面的框架,但我想學習,所以我做我自己的:)目前與onOpen
我的JavaScript客戶端反應,所以我覺得握手是有效的, 連接建立。
現在的問題:
我的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的閱讀,所以我不認爲這是問題。
任何人都可以幫助我嗎?
好的這篇文章可以幫助我發送數據給客戶。這工作得很好:)
但我不明白如何從客戶端:(
接收到的數據進行解碼。在客戶端送我只有一個字母
socket.send("x");
服務器接收7字節? ??
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」,我認爲這意味着只有一個字節的數據。那麼爲什麼閱讀是7?
查看http://stackoverflow.com/questions/8125507/how-can-i-send-and-receive-websocket-messages-on-the-server-side/8125509#8125509解碼算法。 – pimvdb 2012-01-15 15:44:28