Intereting Posts
Как получить реферер, платные / натуральные и ключевые слова для текущего посетителя на PHP с помощью новой Google Analytics? Подтверждение страны / города / штата PHP или Linux Shell: самый быстрый способ уменьшить текстовый файл с более чем 10 строками, чтобы иметь только последние 10 строк Как узнать, какой php.ini используется? PHP: «Функция нижнего колонтитула»? Что такое регулярное выражение PHP для преобразования текста, содержащего URL-адрес в гиперссылку? Лучший способ получить имя хоста с php MAMP / PHP.INI: параметр date.timezone в phpinfo () показывает «нет значения», даже если значение установлено в php.ini проверить, завершена ли загрузка Как удалить повторяющиеся ссылки со страницы, кроме первой Как загрузить файл с помощью PHP и Mysql DB Как закодировать URL как строку javascript в PHP-сгенерированном HTML? Программист пытается выяснить собственный проект с использованием PHP Автозаполнение текстовых полей из данных JSON в файле PHP Проверка того, содержит ли массив все элементы другого массива

Socket_read () говорит «не действительный ресурс»

Я изучаю программирование сокетов и экспериментирую с использованием php. Я хотел подключиться к сокет-серверу с помощью клиента и прочитать ответ сервера от клиента.

Коды для:

Server.php:

$address="127.0.0.1"; $port=3343; echo "I am here"; set_time_limit (0); if(false==($socket= socket_create(AF_INET,SOCK_STREAM, SOL_TCP))) { echo "could not create socket"; } socket_bind($socket, $address, $port) or die ("could not bind socket"); socket_listen($socket); if(($client=socket_accept($socket))) socket_write($client, "Welcome!!", 1024); socket_close($socket); 

Client.php

 $host="127.0.0.1" ; $port=3343; $timeout=30; $sk=fsockopen($host,$port,$errnum,$errstr,$timeout) ; if (!is_resource($sk)) { exit("connection fail: ".$errnum." ".$errstr) ; } else { echo socket_read($sk, 256); //echo "Connected"; } 

При подключении,

Выход сервера:

 I am here 

Выход клиента:

 Warning: socket_read(): supplied resource is not a valid Socket resource in C:\xampp\htdocs\users\srv\test\client.php on line 16 

Нашел проблему здесь.

socket_read () не работает с сокетами, которые не были созданы с помощью socket_create ().

Рабочий код:

 $host="127.0.0.1" ; $port=3343; $timeout=30; $sk=fsockopen($host,$port,$errnum,$errstr,$timeout) ; if (!is_resource($sk)) { exit("connection fail: ".$errnum." ".$errstr) ; } else { while (!feof($sk)) echo fgets($sk, 256); //This does the trick //echo "Connected"; } 

Вы смешиваете типы ресурсов.

fsockopen возвращает указатель файла. Вам нужно использовать fread , fwrite и т. Д., А не socket_read .

socket_read принимает ресурсы сокетов create with socket_create или socket_accept

Пример для fsockopen на странице руководства PHP:

 <?php $fp = fsockopen("udp://127.0.0.1", 13, $errno, $errstr); if (!$fp) { echo "ERROR: $errno - $errstr<br />\n"; } else { fwrite($fp, "\n"); echo fread($fp, 26); fclose($fp); } ?> 

Ссылка fsockopen

ссылка socket_read