WebSocket:将数据服务器发送到客户端不工作

时间:2013-02-25 14:15:21

标签: php websocket

我做了一个简单的PHP代码来测试WebSocket,客户端连接没有问题,可以接收没有probemas的数据,但是我无法将数据从服务器发送到客户端,请更正我的代码才能工作,谢谢

server.php

$in = '';
$content = '';
$connected = 0;
while($in != "quit"){

    if(!$connected){
        $in=trim(fgets(STDIN));
        $pos = strpos($in, 'Sec-WebSocket-Key:');
        if($pos !== false){
            $key = str_replace('Sec-WebSocket-Key: ','',$in);
            $magic = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11";
            $resp = shell_exec("echo -n $key$magic | openssl sha1 -binary | base64");
        }
        if($in == ""){
            $head = "HTTP/1.1 101 Switching Protocols\r\n";
            $head.= "Connection: Upgrade\r\n";
            $head.= "Upgrade: websocket\r\n";
            $head.= "Sec-WebSocket-Accept: $resp\r\n";
            $head.= "\r\n";
            echo $head;
            $connected = 1;
        }
    }else{
        sleep(3);

        $hex = "810461626364"; //abcd
        $byte = str_split($hex, 2);
        $out = '';
        foreach($byte as $b){
            $out.= chr(hexdec($b));
        }
        echo $out;
    }
}

输入终端:

ncat -l 12345 -c 'php -q server.php'

并将客户端连接到localhost:12345

1 个答案:

答案 0 :(得分:1)

解决了,它没有工作,因为它在响应头之后有两个换行符,我改变了这个

$head.= "Sec-WebSocket-Accept: $resp\r\n";
$head.= "\r\n";
echo $head;

这个

$head.= "Sec-WebSocket-Accept: $resp\r\n";
echo $head;

并且有效。