В моей учетной записи общего хостинга в каталоге public_html у меня есть файл php, содержащий код для создания сервера сокетов.
<?php
set_time_limit(0);
$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
$ret = socket_bind($sock, 'localhost', 80);
$ret = socket_listen($sock);
$msgsock = socket_accept($sock);
socket_write($msgsock, " hello");
?>
Когда я открываю этот php-файл в браузере или запускаю его как команду, сервер сокетов ожидает подключения клиента, после чего код должен отправить клиенту «привет» и завершить выполнение. Я знаю, что настоящий сервер сокетов должен иметь цикл, чтобы он мог работать правильно, но этот код предназначен только для тестирования. Также в public_html у меня есть php-файл, который является клиентом,
<?php
set_time_limit(0);
$mysocket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
$result = socket_connect($mysocket, 'localhost', 80);
if ($result === false) {
echo "error";
} else {
echo "successfully connected";
}
$input = socket_read($mysocket,1024);
echo $input;
?>
и когда я открываю его в браузере, он успешно подключается к локальному хосту через порт 80, даже если файл сервера php не запущен. Но когда файл сервера php запущен и ожидает подключения клиента, он продолжает работать даже после того, как файл клиента успешно подключился к локальному хосту, хотя и не получил «привет». Когда я пытаюсь сделать то же самое на своем компьютере с помощью сервера apache и запускаю эти файлы с другого компьютера через Интернет, он работает, то есть серверный файл принимает клиента, отправляет «привет» и завершает выполнение. Итак, что может быть причиной того, что сервер сокетов php не реагирует на клиентские подключения в моей учетной записи общего хостинга? заранее спасибо