我有一个套接字客户端,可以从服务器读取数据。
但是,只要没有剩余数据可供读取,它就不会离开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 != "");
}
}
答案 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 != " ");
}
}