Websocket无效的帧头

时间:2015-07-07 10:16:51

标签: javascript java websocket header

我通过javascript以下列方式将数据从java服务器发送到websocket客户端:

private byte[] makeFrame(String message) throws IOException {
    byte[] bytes = message.getBytes(Charset.forName("UTF-8"));
    ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
    byteStream.write(0x81);
    byteStream.write(bytes.length);
    byteStream.write(bytes);
    byteStream.flush();
    byteStream.close();
    byte[] data = byteStream.toByteArray();
}

但是我收到了错误

Websocket connection to 'ws://localhost:8080/' failed: Invalid frame header

当大小很大时(我相信超过128字节)。我不确定这是否是操作码或其他问题。

非常感谢,Ben

1 个答案:

答案 0 :(得分:0)

问题在这里:

byteStream.write(bytes.length);

有不同的模式,如何将整数编码为字节数组。请see Endianness维基百科文章。

您必须为此做些事情(此代码片段为from .Net WebSocket client):

var arrayLengthBytes = BitConverter.GetBytes(bytes.length)

if (!BitConverter.IsLittleEndian)
{
    Array.Reverse(arrayLengthBytes, 0, arrayLengthBytes.Length);
}

byteStream.write(arrayLengthBytes);