php – Socket_read()说“不是有效的资源”

我正在学习socket编程和使用PHP进行实验.
我想使用客户端连接到套接字服务器,并从客户端读取服务器的响应.

代码

Server.PHP

$address="127.0.0.1";
$port=3343;
echo "I am here";
set_time_limit (0);
if(false==($socket=  socket_create(AF_INET,SOCK_STREAM, SOL_TCP)))
{
    echo "Could not create socket";
}
socket_bind($socket, $address, $port) or die ("Could not bind socket");
socket_listen($socket);
if(($client=socket_accept($socket)))
    socket_write($client, "Welcome!!", 1024);

socket_close($socket);

Client.PHP

$host="127.0.0.1" ;
$port=3343;
$timeout=30;
$sk=fsockopen($host,$port,$errnum,$errstr,$timeout) ;
if (!is_resource($sk)) {
    exit("connection fail: ".$errnum." ".$errstr) ;
} else {
    echo socket_read($sk, 256);
    //echo "Connected";
}

在连接时,

服务器输出

I am here

客户输出

Warning: socket_read(): supplied resource is not a valid Socket resource in C:\xampp\htdocs\users\srv\test\client.PHP on line 16

解决方法:

在这里发现了问题.

socket_read()不适用于尚未使用socket_create()创建的套接字.

工作代码

$host="127.0.0.1" ;
$port=3343;
$timeout=30;
$sk=fsockopen($host,$port,$errnum,$errstr,$timeout) ;
if (!is_resource($sk)) {
    exit("connection fail: ".$errnum." ".$errstr) ;
} else {
    while (!feof($sk)) echo fgets($sk, 256); //This does the trick
    //echo "Connected";
}

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...