stream_socket_client fgets疑问

Frboy

server代码:

$this->socket = stream_socket_server("tcp://0.0.0.0:13008", $errno, $errmsg, STREAM_SERVER_BIND | STREAM_SERVER_LISTEN);
$this->event->add($this->socket, EventInterface::EV_READ, array($this, 'acceptConnection'));

在acceptConnection函数里直接fwrite一条消息(“hello”)回客户端
client代码:

$socket = stream_socket_client('tcp://127.0.0.1:13008', $errno, $errmsg, 5);
if($socket)
{
    fwrite($socket, "\n");
    while(!feof($socket))
    {
        var_dump(fgets($socket, 1024));
    }
    fclose($socket);
}

问题:

在client代码中,stream_socket_client请求之后,并不会触发socket读事件,所以要先fwrite一条消息,才能获取serve返回的数据(“hello”),是这样的么?
如果在client不进行fwrite,当server结束之后,客户端为什么能立即收到server返回的‘hello’消息

4644 1 0
1个回答

walkor

http://php.net/manual/zh/function.fgets.php
你要看下php手册,要了解fgets用法,要什么时候fgets($socket, 1024)才返回。
1、读取了指定的字节数的数据
2、读到了换行符号
3、读到了EOF,也就是链接断开了

建议你用fread替换fgets。
http://php.net/manual/zh/function.fread.php
同样也要看看手册fread用法

  • 暂无评论
年代过于久远,无法发表回答
🔝