首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

stream_socket_client

(PHP 5, PHP 7)

stream_socket_client - 打开Internet或Unix域套接字连接

描述

代码语言:javascript
复制
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

错误/异常

失败时errnoerrstr参数将填充系统级connect()调用中发生的实际系统级错误。如果返回的errno值为0并且函数返回FALSE,则表明错误发生在connect()调用之前。这很可能是由于初始化套接字时出现问题。需要注意的是,errnoerrstr参数将始终通过引用传递。

示例

示例#1 stream_socket_client()示例

代码语言:javascript
复制
<?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)获取日期和时间。

代码语言:javascript
复制
<?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 →

扫码关注腾讯云开发者

领取腾讯云代金券

http://www.vxiaotou.com