gpt4 book ai didi

php - 解码网络字符(HTML5 Websocket)

转载 作者:太空宇宙 更新时间:2023-11-04 15:21:57 25 4
gpt4 key购买 nike

我正在尝试使用 HTML5 websocket(使用 hybi-17 协议(protocol))开发网络聊天,但我在字符解码方面遇到了一些问题。这是我通过客户端发送的内容(用户代理:Firefox 7):

var socket = new MozWebSocket ('ws://localhost/server.php');
socket.onopen = function () {
alert ('Opened!');
}

然后,我发送这些数据:

socket.send ('Hello');
socket.send ('World');

这是服务器端代码:

$bytes = @socket_recv ($socket, $buffer, BUFSIZE, 0);

if (($bytes == 0) || ($bytes == 2)) {
this->disconnect ($socket);
}
else {
echo $buffer;
}

虽然这是收到回显的数据:

��6S~g?Y (Hello)
���~����� (World)

如您所见,套接字已打开,数据从客户端传输到服务器。服务器使用 PHP5 并使用普通套接字函数建立连接。

如何将不可读的字符串解码为人类可读的字符串?

提前致谢。

最佳答案

您犯了人们第一次开始编写使用 TCP 的代码时最常犯的错误之一——您忘记了实现该协议(protocol)!

在您的情况下,您将其忘记在服务器中。客户端已经有一个 WebSocket 实现,您可以通过创建一个“MozWebSocket”对象来请求它。 WebSocket specification说,“每一帧都以 0x00 字节开始,以 0xFF 字节结束,中间包含 UTF-8 数据。”服务器中用于查找帧开始和帧结束的代码在哪里?丢弃0xFF字节的代码在哪里?

您实际上必须实现该协议(protocol)。协议(protocol)规范告诉您如何解码接收到的数据。 (在你的例子中,你看到的垃圾数据很可能是协议(protocol)握手的一部分——在这个 description of the handkshake 阶段看起来像 ^n:ds[4U 的部分。)

我很确定您调用 PHP 脚本以通过 Web 服务器处理 WebSocket 调用的方法不会起作用。也就是说,除非您的 Web 服务器知道如何执行此操作 -- WaterSpoutphpdaemon做。

关于php - 解码网络字符(HTML5 Websocket),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7912772/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com