ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
**socket\_create**(int **$domain**,int **$type**,int **$protocol**) :resource 创建套接字 返回一个套接字,失败时返回 **`FALSE`**。要读取错误代码,可以调用[socket\_last\_error()](https://www.php.net/manual/zh/function.socket-last-error.php)。这个错误代码可以通过[socket\_strerror()](https://www.php.net/manual/zh/function.socket-strerror.php)读取文字的错误说明 一个典型的网络连接由 2 个套接字构成,一个运行在客户端,另一个运行在服务器端 ``` $socket=socket_create(AF_UNIX,SOCK_STREAM,0); ``` 参数1 指定哪个协议用在当前套接字上:**可用的地址/协议** | Domain | 描述 | | --- | --- | | **`AF_INET`** | IPv4 网络协议。TCP 和 UDP 都可使用此协议。 | | **`AF_INET6`** | IPv6 网络协议。TCP 和 UDP 都可使用此协议。 | | **`AF_UNIX`** | 本地通讯协议。具有高性能和低成本的 IPC(进程间通讯)。 | 参数2 选择套接字使用的类型:**可用的套接字类型** | 类型 | 描述 | | --- | --- | | **`SOCK_STREAM`** | 提供一个顺序化的、可靠的、全双工的、基于连接的字节流。支持数据传送流量控制机制。**TCP** 协议即基于这种流式套接字。 | | **`SOCK_DGRAM`** | 提供数据报文的支持。(无连接,不可靠、固定最大长度). **UDP**协议即基于这种数据报文套接字。 | | **`SOCK_SEQPACKET`** | 提供一个顺序化的、可靠的、全双工的、面向连接的、固定最大长度的数据通信;数据端通过接收每一个数据段来读取整个数据包。 | | **`SOCK_RAW`** | 提供读取原始的网络协议。这种特殊的套接字可用于手工构建任意类型的协议。一般使用这个套接字来实现 ICMP 请求(例如 ping)。 | | **`SOCK_RDM`** | 提供一个可靠的数据层,但不保证到达顺序。一般的操作系统都未实现此功能。 | 参数3:是设置指定参数1套接字下的具体协议,php对tcp和udp设置了常量可以直接使用常量**`SOL_TCP`**和**`SOL_UDP`**,其他的则通过[getprotobyname()](https://www.php.net/manual/zh/function.getprotobyname.php)函数获取 ~~~ //getprotobyname()给出本地系统上给定协议名称的协议号 $arr=array("ip","icmp","ggp","tcp", "egp","pup","udp","hmp","xns-idp", "rdp","rvd" ); //Reads the names of protocols into an array.. for($i=0;$i<11;$i++) { $proname=$arr[$i]; echo $proname .":", getprotobyname ($proname)."<br />"; } 结果: ip:0 icmp:1 ggp:3 tcp:6 egp:8 pup:12 udp:17 hmp:20 xns-idp:22 rdp:27 rvd:66 ~~~ **常见协议说明** | 名称 | 描述 | | --- | --- | | icmp | Internet Control Message Protocol 主要用于网关和主机报告错误的数据通信。例如“ping”命令(在目前大部分的操作系统中)就是使用 ICMP 协议实现的。 | | udp | User Datagram Protocol 是一个无连接的、不可靠的、具有固定最大长度的报文协议。由于这些特性,UDP 协议拥有最小的协议开销。 | | tcp | Transmission Control Protocol 是一个可靠的、基于连接的、面向数据流的全双工协议。TCP 能够保障所有的数据包是按照其发送顺序而接收的。如果任意数据包在通讯时丢失,TCP 将自动重发数据包直到目标主机应答已接收。因为可靠性和性能的原因,TCP 在数据传输层使用 8bit 字节边界。因此,TCP 应用程序必须允许传送部分报文的可能。 |