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

时间:2011-07-27 03:36:10

标签: php sockets

我有一个套接字客户端,可以从服务器读取数据。

但是,只要没有剩余数据可供读取,它就不会离开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 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

我用另一种方法解决了它。通过我的服务器在发送完所有数据后向客户端发送(“”)语句。

客户端将在收到声明后退出该循环。

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

}