Со следующим кодом я могу получить 1 запрос и написать его:
function listen() { // Set time limit to indefinite execution set_time_limit (0); // Set the ip and port we will listen on $address = 'XX.XX.XX.XXX'; $port = XXXX; // Create a TCP Stream socket $sock = socket_create(AF_INET, SOCK_STREAM, 0); // Bind the socket to an address/port $bind = socket_bind($sock, $address, $port); // Start listening for connections socket_listen($sock); /* Accept incoming requests and handle them as child processes */ $client = socket_accept($sock); // Read the input from the client – 1024 bytes $input = socket_read($client, 2024); // Strip all white spaces from input echo $input; // Close the master sockets $close = socket_close($sock); var_dump($close); } listen();
Но он автоматически закрывается при получении 1 пакета. Мне нужно продолжать получать пакеты до тех пор, пока не будет получен выход или любая команда закрытия.
Как мне перейти к изменению кода выше, чтобы превратить эту функцию в цикл?
set_time_limit (0); $address = '46.49.41.188'; $port = 7777; $con = 1; $word = ""; $sock = socket_create(AF_INET, SOCK_STREAM, 0); $bind = socket_bind($sock, $address, $port); socket_listen($sock); while ($con == 1) { $client = socket_accept($sock); $input = socket_read($client, 2024); if ($input == 'exit') { $close = socket_close($sock); $con = 0; } if($con == 1) { $word .= $input; } } echo $word;
Если запрос будет завершен, прослушивание будет закрыто. Этот метод был проверен 🙂 и он работает.
Как насчет:
function listen(){ // Set the ip and port we will listen on $address = 'XX.XX.XX.XXX'; $port = XXXX; // Create a TCP Stream socket $sock = socket_create(AF_INET, SOCK_STREAM, 0); // Bind the socket to an address/port $bind = socket_bind($sock, $address, $port); // Start listening for connections socket_listen($sock); /* Accept incoming requests and handle them as child processes */ $client = socket_accept($sock); // Read the input from the client – 1024 bytes $input = socket_read($client, 2024); // Strip all white spaces from input echo $input; // Close the master sockets $close = socket_close($sock); var_dump($close); listen(); } set_time_limit (0); listen();