该问题已解决
server
对 客户端流 持续写入,client
持续读取;但是只有等待 server
端停止对 客户端流 写入后才能,才能读取到数据,这是为什么(角色反过来也是一样的)??流(stream
) 难道不能一边写入,一边读取??只能等待一边写入完成后,另一边才能读取??
完整代码:
server.php
:
$transport = 'tcp://';
$ip = '0.0.0.0';
$port = 9160;
$url = $transport . $ip . ':' . $port;
$socket = stream_socket_server($url , $errno, $errstr);
$res = stream_socket_accept($socket);
echo '客户端已连接' . PHP_EOL;
$d = 20;
$s_time = time();
// 写入数据
// fwrite($res , "server response\n");
// 发送消息到客户端
fwrite($res , "server response\n");
while (true)
{
$e_time = time();
if ($e_time - $s_time > $d) {
break;
}
$msg = fgets($res);
if (!empty($msg)) {
echo '接收到的来自客户端的消息:' . $msg . PHP_EOL;
}
}
// 关闭客户端链接
fclose($res);
// 关闭 socket 监听
fclose($socket);
client.php
:
$transport = 'tcp://';
$ip = '127.0.0.1';
$port = 9160;
$url = $transport . $ip . ':' . $port;
$res = stream_socket_client($url, $errno, $errstr, 30);
$d = 20;
$s_time = time();
fwrite($res , "client data\n");
while (true)
{
$e_time = time();
if ($e_time - $s_time > $d) {
break;
}
$msg = fgets($res);
if (!empty($msg)) {
echo '接收到的来自客户端的消息:' . $msg . PHP_EOL;
}
}
fclose($res);
慕盖茨4494581