首页 文章

为什么套接字读取不会留下循环?

提问于
浏览
3

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

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

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

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

    然后,客户端将在收到语句后退出该循环 .

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

相关问题