Socket通讯的PHP实现系列之一

By heiry on 2019-04-23 [ in 技术 ]

一.第一步:创建socket套接字。

socket_create ( int $domain , int $type , int $protocol ) : resource

创建并返回一个套接字,也称作一个通讯节点。一个典型的网络连接由 2 个套接字构成,一个运行在客户端,另一个运行在服务器端。(socket_create() 正确时返回一个套接字,失败时返回 FALSE。要读取错误代码,可调用 socket_last_error())

domain的可选参数:

AF_INET:     IPv4 网络协议。TCP 和 UDP 都可使用此协议。
AF_INET6:   IPv6 网络协议。TCP 和 UDP 都可使用此协议。
AF_UNIX:      本地通讯协议。具有高性能和低成本的 IPC(进程间通讯)。

type 参数用于选择套接字使用的类型,可选值有:

SOCK_STREAM 提供一个顺序化的、可靠的、全双工的、基于连接的字节流。支持数据传送流量控制机制。TCP 协议即基于这种流式套接字。
SOCK_DGRAM 提供数据报文的支持。(无连接,不可靠、固定最大长度).UDP协议即基于这种数据报文套接字。
SOCK_SEQPACKET 提供一个顺序化的、可靠的、全双工的、面向连接的、固定最大长度的数据通信;数据端通过接收每一个数据段来读取整个数据包。
SOCK_RAW 提供读取原始的网络协议。这种特殊的套接字可用于手工构建任意类型的协议。一般使用这个套接字来实现 ICMP 请求(例如 ping)。
SOCK_RDM 提供一个可靠的数据层,但不保证到达顺序。一般的操作系统都未实现此功能。

protocol参数可选值:

tcp、udp和icmp

可以看出socket_create函数的type参数和protocol参数是相关联的。

二. 第二步:开启套接字链接。

socket_connect ( resource $socket , string $address [, int $port = 0 ] ) : bool

成功时返回 TRUE, 或者在失败时返回 FALSE。 错误代码会传入 socket_last_error()

ADDRESS参数:

如果参数 socket 是 AF_INET , 那么参数 address 则可以是一个点分四组表示法(例如 127.0.0.1 ) 的 IPv4 地址; 如果支持 IPv6 并且 socket 是 AF_INET6,那么 address 也可以是有效的 IPv6 地址(例如 ::1);如果套接字类型为 AF_UNIX ,那么 address 也可以是一个Unix 套接字。

PORT参数:

仅仅用于 AF_INET 和 AF_INET6 套接字连接的时候,并且是在此情况下是需要强制说明连接对应的远程服务器上的端口号。

三. 第三步:socket_bind给套接字绑定名字

socket_bind ( resource $socket , string $address [, int $port = 0 ] ) : bool

绑定 address 到 socket。 该操作必须是在使用 socket_connect() 或者 socket_listen() 建立一个连接之前。

成功时返回 TRUE, 或者在失败时返回 FALSE

四. 监听套接字:socket_listen()

….待续

 

 

 

>> 阅读全文  >>


© 2009-2024 MOSANG.NET DESIGNED BY HEIRY