stream_socket_client
stream_socket_client
(PHP 5, PHP 7)
stream_socket_client - 打开Internet或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
。创建的套接字类型由使用标准URL格式指定的传输确定:transport://target
。对于诸如TCP和UDP的Internet域套接字(AF_INET),参数的目标
部分remote_socket
应包含主机名或IP地址,后跟冒号和端口号。对于Unix域套接字,该target
部分应指向文件系统上的套接字文件。
注意
:默认情况下,流将在阻止模式下打开。您可以使用stream_set_blocking()将其切换到非阻塞模式。
参数
remote_socket
地址到要连接的套接字。
errno
如果连接失败,将被设置为系统级错误号。
errstr
如果连接失败,将被设置为系统级错误消息。
timeout
直到connect()
系统调用应该超时的秒数。
注意
:此参数仅适用于未进行异步连接尝试的情况。
注意
:要设置在套接字上读写数据的超时时间,请使用stream_set_timeout
(),因为timeout
只有在连接套接字时才适用。
flags
位掩码字段可以设置为连接标志的任意组合。目前,连接标志的选择仅限于STREAM_CLIENT_CONNECT
(默认),STREAM_CLIENT_ASYNC_CONNECT
并且STREAM_CLIENT_PERSISTENT
。
context
使用stream_context_create()创建的有效上下文资源。
返回值
成功时返回一个流资源,它可以与其他文件函数(如fgets(),fgetss(),fwrite(),fclose()和feof())一起使用,失败返回FALSE
。
错误/异常
失败时errno
,errstr
参数将填充系统级connect()
调用中发生的实际系统级错误。如果返回的errno
值为0
并且函数返回FALSE
,则表明错误发生在connect()
调用之前。这很可能是由于初始化套接字时出现问题。需要注意的是,errno
和errstr
参数将始终通过引用传递。
示例
示例#1 stream_socket_client()示例
<?php
$fp = stream_socket_client("tcp://www.example.com:80", $errno, $errstr, 30
if (!$fp) {
echo "$errstr ($errno)<br />\n";
} else {
fwrite($fp, "GET / HTTP/1.0\r\nHost: www.example.com\r\nAccept: */*\r\n\r\n"
while (!feof($fp)) {
echo fgets($fp, 1024
}
fclose($fp
}
?>
示例#2使用UDP连接
从本地主机上的UDP服务“白天”(端口13)获取日期和时间。
<?php
$fp = stream_socket_client("udp://127.0.0.1:13", $errno, $errstr
if (!$fp) {
echo "ERROR: $errno - $errstr<br />\n";
} else {
fwrite($fp, "\n"
echo fread($fp, 26
fclose($fp
}
?>
注意
警告
即使远程主机不可访问,UDP套接字有时也会打开而不会出现错误。只有当您读取或写入套接字数据时,错误才会变得明显。原因是因为UDP是一个“无连接”协议,这意味着操作系统在实际需要发送或接收数据之前不会尝试为套接字建立链接。
注意
:当指定数字IPv6地址(例如fe80::1
)时,必须将IP封装在方括号中 - 例如tcp:// fe80::1:80
。
注意
:根据环境的不同,Unix域或可选的连接超时可能不可用。可以使用stream_get_transports()检索可用传输列表。有关内置传输的列表,请参阅支持的套接字传输列表。
另请参阅
- stream_socket_server() - 创建一个Internet或Unix域服务器套接字
- stream_set_blocking() - 在流上设置阻塞/非阻塞模式
- stream_set_timeout() - 设置流上的超时时间
- stream_select() - 在tv_sec和tv_usec指定的超时的情况下,对给定流数组运行select()系统调用的等价操作
- fgets() - 从文件指针获取行
- fgetss() - 从文件指针获取行并去除HTML标签
- fwrite() - 二进制安全文件写入
- fclose() - 关闭打开的文件指针
- feof() - 测试文件结尾的文件指针
← stream_socket_accept
stream_socket_enable_crypto →