为什么套接字读取不离开循环


Why does socket read does not leave loop?

我有一个socket客户端,它将从服务器读取数据。

然而,它不会离开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 != "");
        }
}

我相信你的问题是执行永远不会离开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()超时

我用另一种方法解决了这个问题。通过我的服务器发送一个(" ")语句后,所有的数据已经发送到客户端。

客户端将在收到语句后退出该循环。

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 != " ");
        }
}