函数名称:stream_socket_client()
适用版本:PHP 4 >= 4.3.0, PHP 5, PHP 7
函数描述:stream_socket_client()函数打开一个网络或Unix域套接字连接。它提供了一种简单的方式来创建一个与远程服务器或本地套接字通信的连接。
语法:resource stream_socket_client ( string $remote_socket [, int &$errno [, string &$errstr [, float $timeout = ini_get("default_socket_timeout") [, int $flags = STREAM_CLIENT_CONNECT [, resource $context ]]]]] )
参数:
- $remote_socket:要连接的目标套接字地址。对于TCP/IP连接,格式是"tcp://hostname:port"。对于Unix域套接字,格式是"unix:///path/to/socket"。
- $errno(可选):一个引用变量,用于存储发生的错误号。如果连接成功,将为0。
- $errstr(可选):一个引用变量,用于存储发生的错误消息。如果连接成功,将为空字符串。
- $timeout(可选):连接超时时间,以秒为单位。默认值是php.ini中的"default_socket_timeout"。
- $flags(可选):连接标志,可以是STREAM_CLIENT_CONNECT(默认)或STREAM_CLIENT_ASYNC_CONNECT。使用STREAM_CLIENT_ASYNC_CONNECT时,非阻塞模式连接将被启用。
- $context(可选):一个资源类型的上下文选项。可用于传递配置选项和参数。
返回值:如果连接成功,则返回一个打开的套接字资源。如果连接失败,则返回false。
示例:
// 连接到远程TCP/IP服务器
$socket = stream_socket_client("tcp://www.example.com:80", $errno, $errstr, 30);
if ($socket) {
// 发送HTTP请求
fwrite($socket, "GET / HTTP/1.1\r\nHost: www.example.com\r\n\r\n");
// 读取服务器响应
while (!feof($socket)) {
echo fgets($socket, 4096);
}
// 关闭连接
fclose($socket);
} else {
echo "连接失败:$errstr ($errno)";
}
// 连接到本地Unix域套接字
$socket = stream_socket_client("unix:///var/run/socket.sock", $errno, $errstr, 30);
if ($socket) {
// 发送自定义协议数据
fwrite($socket, "Hello, server!");
// 读取服务器响应
$response = fread($socket, 4096);
// 处理服务器响应
echo $response;
// 关闭连接
fclose($socket);
} else {
echo "连接失败:$errstr ($errno)";
}
以上示例展示了如何使用stream_socket_client()函数连接到远程TCP/IP服务器和本地Unix域套接字,并发送/接收数据。请根据实际情况修改目标套接字地址、发送的数据和处理响应的逻辑。