【发布时间】:2012-02-10 20:27:36
【问题描述】:
我正在尝试编写自己的 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()))
消息是完全从Channel读入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”我认为这意味着只有一个字节数据。那为什么 read 是 7 ???
【问题讨论】:
标签: java javascript websocket