1

以前にデータが既に読み取られているときに、socket_read()をブロックしようとしています。$ spawnソケットが新しいデータを取得するのを待つ必要があります(等しくてもかまいません。つまり、「FE」を受信したときに両方のデータを読み取る必要があります)。

新しいデータがない場合にブロックするにはどうすればよいですか?

$i=0;
while ($i<10){
    //Read and Parse Client input
    $input = strtoupper(bin2hex(socket_read($spawn, 1)));
    echo $input . "\n";

    //Deal with requests
    if ($input == "FE"){ //Server Ping
        socket_write($spawn, $ping_packet);
        echo "Ping Attempt \n";
    } elseif ($input == "02"){ //Handshake Request
        socket_write($spawn, $handshake_packet);
        echo "Handshake Attempt \n";
    } elseif($input == "01"){ //Login Request
        socket_write($spawn, $kick_packet);
        echo "Login Attempt \n";
    }
        $i++;
}
4

2 に答える 2

1

socket_set_blockを使用して、ソケットをブロックするように設定できます。多数のソケットを同時に処理する方法については、socket_selectを参照してください。

于 2012-07-19T13:17:34.283 に答える