Почему чтение сокета не выходит из цикла? - PullRequest
3 голосов
/ 27 июля 2011

У меня есть клиент сокета, который будет читать данные с сервера.

Однако, он не покидает цикл do.. while, как только больше не осталось данных для чтения? Почему это так? Спасибо

while (true)
{
    $data_old=$data;
    $data = file_get_contents("userInput.txt");

        if($data_old != $data)
        {
            socket_write($socket, $data, strlen($data));
            do
            {
                $line =@socket_read($socket,2048);
                echo $line. "\n";
            }
            while($line != "");
        }

}

Ответы [ 2 ]

1 голос
/ 27 июля 2011

Я считаю, что ваша проблема в том, что выполнение никогда не покидает цикл while (true), а не while($line != ""), попробуйте это:

while (true)
{
    $data_old = $data;
    $data = file_get_contents('userInput.txt');

    if ($data_old != $data)
    {
        socket_write($socket, $data, strlen($data));

        while (true)
        {
            $line = @socket_read($socket, 2048);

            echo $line. "\n";

            if ($line == '')
            {
                break 2;
            }
        }
    }
}

Если розетка неблокирующая, вы также можете использовать socket_select() с таймаутом.

0 голосов
/ 27 июля 2011

я решил это другим способом.Мой сервер отправляет ("") оператор клиенту после того, как все данные были отправлены.

Клиентская сторона выйдет из этого цикла после получения оператора.

while (true)
{
    $data_old=$data;
    $data = file_get_contents("userInput.txt");

        if($data_old != $data)
        {
            socket_write($socket, $data, strlen($data));
            do
            {
                $line =@socket_read($socket,2048);
                if($line != " ")
                echo $line. "\n";
            }
            while($line != " ");
        }

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