我有一个由python编写的websocket服务器和一个由javaScript编写的websocket客户端。
当使用像'hahaha'这样的英文字符时,他们可以互相发送消息并且运作良好。
当使用像'哈哈'这样的汉字时,服务器可以收到消息,我在python端解码消息然后运行良好。但是当服务器向客户端发送'哈哈'字符时,它说与'ws:// localhost:3369 /'的WebSocket连接失败:无法将文本框架解码为UTF-8。
我发送的数据是b'\ x81 \ x02 \ xe5 \ x93 \ x88 \ xe5 \ x93 \ x88'。 \ x81总是如此。 \ x02表示它有两个字符,没有掩码。 \ xe5 \ x93 \ x88 \ xe5 \ x93 \ x88代表paylod('哈哈')。
任何人都可以告诉我如何解决这个问题,谢谢。
js code:
var socket = new WebSocket('ws://localhost:3369');
socket.onopen = function(){
console.log('socket open');
$('#send').click(function(){
var data = 'dsfg';
socket.send(data);
console.log('click');
});
}
socket.onmessage = function(result){
console.log("从服务端收到的数据:");
console.log(result.data);
}
socket.onclose = function(evt){
console.log('socket close');
}
socket.onerror = function(evt) {
console.log('error:')
};
python代码:
def send_data(self, data):
if data:
data = str(data)
else:
return False
token = b'\x81'
length = len(data)
if length < 126:
token += struct.pack('B', length)
elif length <= 0xFFFF:
token += struct.pack('!BH', 126, length)
else:
token += struct.pack('!BQ', 127, length)
data = token + data.encode()
self.con.send(data)
return True
答案 0 :(得分:0)
长度部分的长度必须为,以字节为单位。因此,使用6作为第二个字节的值,如下所示。
\x81\x06\xe5\x93\x88\xe5\x93\x88