PHP Socket编程 之 php中连接tcp服务的三种方式
首先需要现有一个 tcp 服务,我们使用 php中的 socket 系列函数实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | <?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 \n" ; $str = "this is a service message" ; //向连接的客户端发送数据 socket_write( $msgsocket , $str , strlen ( $str )); //操作完之后需要关闭该连接否则 feof() 函数无法正确识别打开的句柄是否读取完成 socket_close( $msgsocket ); } } |
连接 tcp 服务:
使用 socket 系列函数连接
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <?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 连接
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <?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 连接
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <?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 ; |
分类:
PHP
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具