当前位置:首页 > PHP

php实现socket

2026-02-27 10:47:05PHP

PHP 实现 Socket 通信

PHP 可以通过 socket 扩展实现网络通信,包括 TCP 和 UDP 协议。以下是实现 Socket 通信的基本方法。

创建 TCP 服务器

使用 socket_createsocket_bindsocket_listen 创建一个 TCP 服务器。

php实现socket

$host = '127.0.0.1';
$port = 8080;

// 创建 Socket
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
    die("Socket 创建失败: " . socket_strerror(socket_last_error()));
}

// 绑定 Socket
if (!socket_bind($socket, $host, $port)) {
    die("Socket 绑定失败: " . socket_strerror(socket_last_error()));
}

// 监听 Socket
if (!socket_listen($socket, 5)) {
    die("Socket 监听失败: " . socket_strerror(socket_last_error()));
}

echo "服务器已启动,监听 $host:$port\n";

// 接受客户端连接
$client = socket_accept($socket);
if ($client) {
    $message = "欢迎连接到服务器!\n";
    socket_write($client, $message, strlen($message));
    socket_close($client);
}

socket_close($socket);

创建 TCP 客户端

使用 socket_createsocket_connect 创建一个 TCP 客户端。

$host = '127.0.0.1';
$port = 8080;

// 创建 Socket
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
    die("Socket 创建失败: " . socket_strerror(socket_last_error()));
}

// 连接到服务器
if (!socket_connect($socket, $host, $port)) {
    die("连接失败: " . socket_strerror(socket_last_error()));
}

// 读取服务器发送的消息
$response = socket_read($socket, 1024);
echo "服务器回复: $response\n";

socket_close($socket);

创建 UDP 服务器

UDP 是无连接的协议,使用 socket_recvfrom 接收数据。

php实现socket

$host = '127.0.0.1';
$port = 8080;

// 创建 Socket
$socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
if ($socket === false) {
    die("Socket 创建失败: " . socket_strerror(socket_last_error()));
}

// 绑定 Socket
if (!socket_bind($socket, $host, $port)) {
    die("Socket 绑定失败: " . socket_strerror(socket_last_error()));
}

echo "UDP 服务器已启动,监听 $host:$port\n";

// 接收数据
$buf = '';
$from = '';
$port = 0;
socket_recvfrom($socket, $buf, 1024, 0, $from, $port);
echo "收到来自 $from:$port 的消息: $buf\n";

socket_close($socket);

创建 UDP 客户端

UDP 客户端使用 socket_sendto 发送数据。

$host = '127.0.0.1';
$port = 8080;

// 创建 Socket
$socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
if ($socket === false) {
    die("Socket 创建失败: " . socket_strerror(socket_last_error()));
}

// 发送数据
$message = "Hello, UDP Server!";
socket_sendto($socket, $message, strlen($message), 0, $host, $port);

socket_close($socket);

错误处理

Socket 操作可能会失败,建议检查每次调用的返回值并使用 socket_last_errorsocket_strerror 获取错误信息。

if ($socket === false) {
    $errorCode = socket_last_error();
    $errorMsg = socket_strerror($errorCode);
    die("Socket 操作失败: $errorMsg (Code: $errorCode)");
}

注意事项

  • 确保 PHP 已安装 socket 扩展(通常默认启用)。
  • 防火墙或网络配置可能会阻止 Socket 通信,需检查端口是否开放。
  • 高并发场景下需使用多线程或异步 IO(如 stream_select)。

以上示例展示了 PHP 中 Socket 的基本用法,适用于简单的网络通信需求。

标签: phpsocket
分享给朋友:

相关文章

vue实现socket

vue实现socket

Vue 实现 WebSocket 通信 在 Vue 中实现 WebSocket 通信可以通过原生 WebSocket API 或第三方库如 socket.io-client。以下是两种方法的详细实现方…

php实现定时任务

php实现定时任务

PHP 实现定时任务的几种方法 在 PHP 中实现定时任务可以通过多种方式完成,具体选择取决于项目需求和服务器环境。以下是常见的实现方法: 使用 Cron 任务 Cron 是 Linux 系统中常用…

php实现接口

php实现接口

PHP 实现接口的方法 在 PHP 中,接口(Interface)用于定义一组方法的规范,而不实现具体功能。类可以实现一个或多个接口,并必须实现接口中定义的所有方法。 定义接口 接口使用 inter…

php 函数实现

php 函数实现

PHP 函数实现基础 PHP 函数的定义使用 function 关键字,后跟函数名和参数列表。函数名不区分大小写,但建议保持一致。 function functionName($param1, $p…

php 实现单点登录

php 实现单点登录

PHP 实现单点登录的方法 单点登录(SSO)允许用户通过一次登录访问多个相互信任的系统。以下是基于 PHP 的实现方案: 基于共享 Session 的方案 在同一个主域名下的子域名间可以通过共享…

php实现登陆

php实现登陆

PHP 实现登录功能 创建登录表单 在 HTML 文件中创建一个登录表单,包含用户名和密码输入框,表单的 action 属性指向处理登录的 PHP 文件。 <form action="logi…