问题描述
服务器说:当我从移动设备访问站点时,在握手过程中未定义索引 Sec-WebSocket-Key。从同一台电脑(本地主机)它确定
function doHandshake($received_header,$client_socket_resource,$host_name,$port) {
$headers = array();
$lines = preg_split("/\r\n/",$received_header);
foreach($lines as $line)
{
$line = chop($line);
if(preg_match('/\A(\S+): (.*)\z/',$line,$matches))
{
$headers[$matches[1]] = $matches[2];
}
}
$secKey = $headers['Sec-WebSocket-Key'];
$secAccept = base64_encode(pack('H*',sha1($secKey . '258EAFA5-E914-47DA-95CA-C5AB0DC85B11')));
$buffer = "HTTP/1.1 101 Web Socket Protocol Handshake\r\n" .
"Upgrade: websocket\r\n" .
"Connection: Upgrade\r\n" .
"WebSocket-Origin: $host_name\r\n" .
"WebSocket-Location: ws://$host_name:$port/demo/shout.PHP\r\n".
"Sec-WebSocket-Accept:$secAccept\r\n\r\n";
socket_write($client_socket_resource,$buffer,strlen($buffer));
}
解决方法
您需要将 $hostname "localhost" 替换为分配给您计算机的 IP 地址。 您可以访问 https://www.tp-link.com/us/support/faq/838/ 查找主机的 IP 地址。