Socket 并不是一个协议, 其本质是对 TCP/IP 协议进行的封装, 并对外提供了一组接口, 允许用户可以自由的按相关协议组装数据, 与服务器进行交互. 一切基于 TCP/IP 的协议可以通过 Socket 进行实现.
PHP 通过 Socket 扩展也可以实现对 Socket 编程. 使用 PHP 进行 Socket 通信的简单过程如下:
PHP Socket 编程涉及的主要函数:
socket_create(): 初始化一个socket资源
socket_bind(): 将socket资源绑定到指定地址
socket_listen(): 监听socket的连接请求
socket_accept(): 接受来自客户端的连接, 返回一个新socket资源用于通讯. 如果接收到多个连接, 只会使用第一个连接. 没有连接时, 该函数保持堵塞状态, 直到有新的连接. 如果使用socket_set_blocking() or socket_set_nonblock()将socket设置为非堵塞状态, 没有连接时该函数返回FALSE
socket_read(): 从连接资源中读取指定字节数的数据, 读取成功时, 返回字符串. 失败时, 返回FALSE. 没有数据时, 返回空字符串
socket_write(): 向连接资源写入信息返回给客户端
socket_strerror(): 根据错误号获取错误消息
socket_last_error(): 返回上一次错误的错误号
示例一: 客户端和服务端的一对一通信, 由客户端推送数据到服务端
client.php
$host = '127.0.0.1';
$port = 65533;
if(($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === FALSE)
{
exit('初始化socket资源错误: ' . socket_strerror(socket_last_error($sock)));
}
if(socket_connect($sock, $host, $port) === FALSE)
{
exit('连接socket失败: ' . socket_strerro