-1

我做了一个简单的php代码来测试WebSocket,客户端连接没有问题,可以在没有探针的情况下接收数据,但是我不能从服务器发送数据到客户端,请更正我的代码,谢谢

服务器.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

4

1 回答 1

1

解决了,它不起作用,因为它在响应标题后有两个换行符,我改变了这个

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

为了这

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

它奏效了。

于 2013-02-26T19:13:54.190 回答