-1

WebSocketをテストするための簡単なphpコードを作成しました。クライアントは問題なく接続し、プローブなしでデータを受信できましたが、サーバーからクライアントにデータを送信できません。コードを修正して機能させてください。

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に接続します

4

1 に答える 1

1

解決しました。応答ヘッダーの後に2つの改行があったため、機能しませんでした。これを変更しました

$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 に答える