我通过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
答案 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);