stream_socket_client fgets疑问

0

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’消息

已邀请:

walkor

赞同来自: Frboy

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用法

要回复问题请先登录注册