
本文介绍如何在 PHP 中使用 stream_socket_client() 从本地另一脚本安全、可靠地连接到已运行的 stream_socket_server() 创建的 TCP 服务端,并完成数据发送,涵盖基础用法、错误处理与实用示例。
本文介绍如何在 php 中使用 `stream_socket_client()` 从本地另一脚本安全、可靠地连接到已运行的 `stream_socket_server()` 创建的 tcp 服务端,并完成数据发送,涵盖基础用法、错误处理与实用示例。
要从另一个 PHP 脚本连接并发送数据至已启动的 TCP 流服务器(如通过 stream_socket_server('tcp://0.0.0.0:9000', ...) 创建的服务),核心方法是使用 stream_socket_client() 函数建立客户端连接。
✅ 基础连接与通信示例
假设服务端监听 0.0.0.0:9000(即所有接口),客户端可使用 127.0.0.1(本地回环)安全连接:
<?php // client.php
$host = '127.0.0.1';
$port = 9000;
$timeout = 30;
// 建立连接
$fp = @stream_socket_client(
"tcp://{$host}:{$port}",
$errno,
$errstr,
$timeout
);
if (!$fp) {
die("连接失败:[{$errno}] {$errstr}\n");
}
// 发送数据(注意:TCP 是字节流,无消息边界)
fwrite($fp, "Hello from client!\n");
// 可选:读取服务端响应(需服务端主动 echo 或 reply)
$response = fgets($fp, 1024);
echo "服务端响应:", $response ?: "(无响应)\n";
fclose($fp);
?>
⚠️ 关键注意事项
-
地址一致性:服务端若绑定
0.0.0.0:9000,客户端应优先使用127.0.0.1:9000(而非localhost,避免因 DNS 解析或 IPv6 优先导致延迟或失败); -
防火墙与权限:确保本地防火墙未拦截
9000端口;CLI 运行的 PHP 需有网络访问权限; -
阻塞与超时:
stream_socket_client()默认阻塞,务必设置合理$timeout(单位:秒),防止无限等待; -
资源释放:连接使用完毕后必须调用
fclose($fp),否则可能引发文件描述符泄漏; -
协议层级:该方式建立的是原始 TCP 连接,不提供 WebSocket 协议支持(如需 WebSocket,请改用 Ratchet、Swoole 或
ext-websocket等专用扩展)。
? 总结
stream_socket_client() 是 PHP 原生、轻量且可靠的 TCP 客户端连接方案,适用于进程间简单字节流通信。配合服务端 stream_socket_accept() 和循环 fgets()/fwrite(),即可构建稳定的本地 IPC 通道。对于高并发或复杂协议场景,建议升级至 Swoole 或 ReactPHP 等异步框架。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











