socket命令
1、创建
resource socket_create (int $domain ,int $type ,int $protocol )
创建并返回套接字资源,也称为通信端点。典型的网络连接由2个套接字组成,一个执行客户端角色,另一个执行服务器的角色。
参数
domain
-
该
domain
参数指定套接字使用的协议族。可用的地址/协议族 域 描述 AF_INET
基于IPv4 Internet协议。TCP和UDP是该协议族的常见协议。 AF_INET6
IPv6基于Internet的协议。TCP和UDP是该协议族的常见协议。 AF_UNIX
本地通讯协议族 高效率和低开销使它成为一种很好的IPC(进程间通信)形式。
type
-
该
type
参数选择套接字使用的通信类型。可用套接字类型 类型 描述 SOCK_STREAM
提供顺序,可靠,全双工,基于连接的字节流。可以支持带外数据传输机制。TCP协议基于此套接字类型。 SOCK_DGRAM
支持数据报(无连接,固定最大长度不可靠的消息)。UDP协议基于此套接字类型。 SOCK_SEQPACKET
为固定最大长度的数据报提供顺序可靠的基于双向连接的数据传输路径; 每个读取呼叫都需要消费者读取整个数据包。 SOCK_RAW
提供原始网络协议访问。这种特殊类型的套接字可以用来手动构造任何类型的协议。此套接字类型的常见用途是执行ICMP请求(如ping)。 SOCK_RDM
提供不保证订购的可靠数据报层。这很可能在您的操作系统上未实现。
protocol
-
该
protocol
参数设置domain
在返回的套接字上进行通信时指定的特定协议。可以使用getprotobyname()通过名称检索正确的值。如果希望的协议是TCP,或者UDP是相应的常量SOL_TCP
,SOL_UDP
也可以使用。常用协议 名称 描述 ICMP 互联网控制消息协议主要由网关和主机用来报告数据报通信中的错误。“ping”命令(在大多数现代操作系统中存在)是ICMP的示例应用程序。 UDP 用户数据报协议是具有固定记录长度的无连接,不可靠的协议。由于这些方面,UDP需要最小量的协议开销。 TCP 传输控制协议是一种可靠的基于连接的面向流的全双工协议。TCP保证按照发送顺序接收所有数据包。如果任何数据包在通信过程中丢失,TCP将自动重传数据包,直到目标主机确认该数据包。由于可靠性和性能原因,TCP实现本身决定了底层数据报通信层的适当八位字节边界。因此,TCP应用程序必须允许部分记录传输的可能性。
返回值
socket_create()在成功或FALSE
错误时返回套接字资源。实际的错误代码可以通过调用 socket_last_error()来检索 。此错误代码可能会传递给 socket_strerror()以获取错误的文本说明。
例子
$socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
2、绑定
描述
bool socket_bind (resource $socket ,string $address [,int $port= 0 ])
将名称给定义address
到由socket描述的套接字socket
。这必须在使用socket_connect() 或socket_listen()建立连接之前完成。
参数
socket
使用socket_create()创建的有效套接字资源。
address
如果套接字是AF_INET
家族,则 address
是以虚线符号表示的IP(例如127.0.0.1)。
如果套接字是AF_UNIX
系列,则 address
是Unix域套接字的路径(例如/tmp/my.sock)。
port
(可选的)
该port
参数仅在绑定AF_INET
套接字时使用,并指定要在其上侦听连接的端口。
返回值
返回TRUE
成功或FALSE
失败。
可以使用socket_last_error()检索错误代码。该代码可能会传递给socket_strerror()以获取错误的文本解释。
例子
$host = '127.0.0.1';//ip地址 $port = '2204';//端口号 $backlog = 10;//最大连接数 $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); socket_bind($socket, $host, $port); socket_listen($socket, $backlog);
3、连接
描述
bool socket_connect (resource $socket ,string $address [,int $port= 0 ])
参数
socket
address
该address
参数是在点分表示法表示的IPv4地址(例如127.0.0.1)如果 socket
是AF_INET
,有效的IPv6地址(例如:: 1)如果启用IPv6支持和socket
是AF_INET6
或Unix域套接字的路径名,如果套接字家庭是 AF_UNIX
。
port
该port
参数仅用于连接到一个AF_INET
或一个 AF_INET6
套接字时必须使用,并指定要在其上进行连接的远程主机上的端口。
返回值
返回TRUE
成功或FALSE
失败。可以使用socket_last_error()检索错误代码 。该代码可能会传递给 socket_strerror()以获取错误的文本解释。
例子
$socket = socket_create(AF_INET,SOCK_DGRAM,SOL_UDP); socket_connect($socket,'127.0.0.1',2204);
4、监听
说明
bool socket_listen ( resource $socket [, int $backlog = 0 ] )
socket_create( ) 函数创建一个套接字,然后通过 socket_bing( ) 函数进行绑定刚创建的套接字,通过此函数进行监听!
socket_listen( ) 仅限用于 SOCK_STREAM(流式套接字)或者 SOCK_SEQPACKET(通常用于非网络协议,例如X.25,或是广播协议AX.25);
参数
scoket
通过scoket_create( ) 函数创建的 socket;
backlog
最多积压的传入连接将排队等待处理。如果一个连接请求到达队列的完整的客户端可能会收到一个错误的econnrefused,指示或如果底层协议支持重传请求可能被忽视,重试可能会成功。
注:
传递给待定参数的最大数量取决于底层平台。在Linux上,它默默地截断somaxconn。在Win32中,如果通过somaxconn,基础服务程序 socket 将积压到最大化的合理值。在这个平台上没有标准的规定来查找实际的积压值。
返回值
成功时返回 TRUE
, 或者在失败时返回 FALSE
。错误代码可以检索与socket_last_error()。这个代码可以通过socket_strerror()得到错误的文本解释。
待补充。。。