欢迎光临《小雷的网站》
加入收藏 | 设为首页 | 联系我们
小雷的网站
游客,您好!
请使用QQ先登陆
  • 最新公告:如果有什么问题,请大家联系客服处理.客服在线时间:12:00-23:59 其它时间段请留言.
  • 博文详细内容

    php中连接tcp服务的三种方式
    资讯栏目:微信小程序 | 发布者:小雷 | 关注度:703次 | 发布时间:2023-08-16 16:39:58

    首先需要现有一个 tcp 服务,我们使用 php中的 socket 系列函数实现

    复制代码

    <?php
    //创建socket套接字
    $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
    //设置阻塞模式socket_set_block($socket);
    //为套接字绑定ip和端口
    socket_bind($socket,'127.0.0.1',3046);
    //监听socket
    socket_listen($socket,4);
    while(true)
    {    
    //接收客户端请求
        if(($msgsocket = socket_accept($socket)) !== false)
        {        
        //读取请求内容
            $buf = socket_read($msgsocket, 8192);
            echo "Received msg: $buf 
    ";
            $str = "this is a service message";        
            //向连接的客户端发送数据 
            socket_write($msgsocket, $str,strlen($str));        
            //操作完之后需要关闭该连接否则 feof() 函数无法正确识别打开的句柄是否读取完成
            socket_close($msgsocket);
        }
    }

    连接 tcp 服务:

      使用 socket 系列函数连接


    <?php
    $st="socket send message";
    $length = strlen($st);
    //创建tcp套接字
    $socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
    //连接tcp
    socket_connect($socket, '127.0.0.1',3046);
    //向打开的套集字写入数据(发送数据)
    $s = socket_write($socket, $st, $length);
    //从套接字中获取服务器发送来的数据
    $msg = socket_read($socket,8190);
    echo $msg;
    //关闭连接
    socket_close($socket);


      使用 fsockopen 连接


    <?php
    //使用 fsockopen 打开tcp连接句柄
    $fp = fsockopen("tcp://127.0.0.1",3046);
    $msg = "fsockopen send message";
    //向句柄中写入数据
    fwrite($fp,$msg);
    $ret = "";
    //循环遍历获取句柄中的数据,其中 feof() 判断文件指针是否指到文件末尾
    while (!feof($fp)){    
    stream_set_timeout($fp, 2);    
    $ret .= fgets($fp, 128);
    }
    //关闭句柄
    fclose($fp);
    echo $ret;



      使用 stream_socket_client 连接

    复制代码

    <?php
    //使用 stream_socket_client 打开 tcp 连接
    $fp = stream_socket_client("tcp://127.0.0.1:3046");
    $msg = "fsockopen send message";
    //向句柄中写入数据
    fwrite($fp,$msg);
    $ret = "";
    //循环遍历获取句柄中的数据,其中 feof() 判断文件指针是否指到文件末尾
    while (!feof($fp)){    
    stream_set_timeout($fp, 2);    
    $ret .= fgets($fp, 128);
    }
    //关闭句柄
    fclose($fp);
    echo $ret;


    转载请注:小雷的网站 http://www.leihx.com/news/112.html
    评论

    您还没有登陆,请登陆后再评论吧!
    本站只支持QQ登陆,请不要发布不当的以及违反国家法律的言论!
    版权信息:@2018-2025 www.leihx.com 网站访问量:5362290人次 互联网ICP备案:黔ICP备15016820号-4
    联系地址:贵州省铜仁市碧江区川硐教育园区 合作咨询:400-180-5676 (周一至周五 9:00-18:00)