Здравствуйте! Помогите, пожалуйста. Нашел пример клиента TCP: PHP: <?php error_reporting(E_ALL); echo "<h2>Соединение TCP/IP</h2>\n"; /* Получаем порт сервиса WWW. */ $service_port = 1234; /* Получаем IP-адрес целевого хоста. */ $address = '0.0.0.0'; /* Создаём сокет TCP/IP. */ $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); if ($socket === false) { echo "Не удалось выполнить socket_create(): причина: " . socket_strerror(socket_last_error()) . "\n"; } else { echo "OK.\n"; } echo "Пытаемся соединиться с '$address' на порту '$service_port'..."; $result = socket_connect($socket, $address, $service_port); if ($result === false) { echo "Не удалось выполнить socket_connect().\nПричина: ($result) " . socket_strerror(socket_last_error($socket)) . "\n"; } else { echo "OK.\n"; } $in = "help\r\n"; $out = ''; echo "Отправляем HTTP-запрос HEAD..."; socket_write($socket, $in); echo "OK.\n"; echo "Читаем ответ:\n\n"; while ($out = socket_read($socket, 2048)) { echo $out; } echo "Закрываем сокет..."; socket_close($socket); echo "OK.\n\n"; ?> Когда мне надо повторно отправить запрос и получить сразу же от сервера ответ, то ничего не приходит. Могу только первый раз отправить и получить. Пример как я это пытаюсь сделать: PHP: $in = "help\r\n"; $out = ''; echo "Отправляем HTTP-запрос HEAD..."; socket_write($socket, $in); echo "OK.\n"; echo "Читаем ответ:\n\n"; while ($out = socket_read($socket, 2048)) { echo $out; } $in = "help\r\n"; echo "Отправляем HTTP-запрос HEAD..."; socket_write($socket, $in); echo "OK.\n"; echo "Читаем ответ:\n\n"; while ($out = socket_read($socket, 2048)) { echo $out; } В чем моя ошибка, как мне не один раз получать/отправлять на сервер?
Гм, 5 секунд гугления говорят, как обслуживать сокеты: https://www.php.net/manual/ru/sockets.examples.php Вы забыли про петлю. После выполнения кода он просто завершается.
При каждом новом подключении, сервер создает как бы новую сессию. Вариант "каждый раз с новым сокетом" невозможен. --- Добавлено --- Можете, пожалуйста, уточнить про "петлю"?
Я про цикл. В Вашем коде выполнение происходит один раз и сокет закрывается. Вам же нужно сокет держать и проверять, есть ли новые данные.