Транспортная конечная точка не подключена - PullRequest
2 голосов
/ 27 мая 2011

Мой код такой, но не работает

<?php
    $sock = socket_create(AF_INET, SOCK_STREAM, 0);
    $sk = socket_connect($sock,"10.0.1.43","1234");
    socket_set_nonblock($sock);

    while (1) {        
        sleep(2);
        $buffer=socket_read($sock,512);
        echo "Buffer = $buffer \n";
        echo "Last Error = ".socket_last_error($sock).socket_strerror(socket_last_error($sock))."\n";        
    }        
?>

Ошибка отображения:

невозможно прочитать из сокета [107]: конечная точка транспорта не подключена Трассировка стека PHP: Буфер =
Последняя ошибка = 107Транспортная конечная точка не подключена

Спасибо

Ответы [ 3 ]

2 голосов
/ 27 мая 2011

Вы должны сначала принять соединение ! Внутри вашего while() цикла сделайте еще один while(), например:

while($client = socket_accept($sock)) {
    $buffer=socket_read($client, 512);
    echo "Buffer = $buffer \n";
}

Это должно работать, как вы и собираетесь.

1 голос
/ 27 мая 2011

ОК, поэтому клиентский сокет не подключен.

Что такое протокол '0'? Вы уверены, что «0» - это TCP в вашей системе? Не уверен, что вы можете изменить состояние блока / неблокирования сокета после connect () - никогда не пробовал такого Если $ sk равно false, какая последняя ошибка? Доступен ли сервер по адресу 10.0.1.43:1234 по протоколу TCP?

Rgds, Martin

0 голосов
/ 16 сентября 2012

Как я уже писал в комментарии к предыдущему ответу, вы можете найти прекрасный пример решения этой проблемы на страницах примеров PHP.net . В основной статье вы найдете хороший пример того, как сделать слушателя без ошибок, на который вы ссылаетесь, для одного клиента и, как заметил Хавьер ниже, как сделать то же самое для мультиклиентских целей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...