当前位置:首页 > PHP

php实现socket

2026-02-27 10:47:05PHP

PHP 实现 Socket 通信

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

创建 TCP 服务器

使用 socket_createsocket_bindsocket_listen 创建一个 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()));
}

// 绑定 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 接收数据。

$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 的基本用法,适用于简单的网络通信需求。

php实现socket

标签: phpsocket
分享给朋友:

相关文章

php实现socket

php实现socket

PHP 实现 Socket 通信 PHP 可以通过 socket 扩展实现网络通信,支持 TCP/UDP 协议。以下是实现 Socket 通信的核心步骤和代码示例。 创建 TCP 服务器 //…

php实现栈

php实现栈

栈的基本概念 栈(Stack)是一种遵循后进先出(LIFO)原则的数据结构。核心操作包括: push:元素入栈。 pop:元素出栈(返回并移除栈顶元素)。 peek:查看栈顶元素(不移…

php实现上传

php实现上传

PHP 文件上传实现 HTML 表单设置 创建一个包含文件上传字段的 HTML 表单,确保表单的 enctype 属性设置为 multipart/form-data,这是文件上传必需的设置。 <…

php 购物车实现

php 购物车实现

数据库设计 购物车功能通常需要设计数据库表存储商品和用户信息。常见的表包括products(商品表)、users(用户表)和cart(购物车表)。cart表通常包含字段:id(主键)、user_id(…

php 实现购物车

php 实现购物车

PHP 实现购物车功能 购物车功能是电子商务网站的核心部分,可以通过 PHP 和 Session 或数据库来实现。以下是两种常见的实现方式: 使用 Session 存储购物车数据 Session…

php无限分类的实现

php无限分类的实现

PHP无限分类的实现 无限分类是一种常见的树形结构数据组织方式,适用于商品分类、菜单管理、地区选择等场景。以下是几种实现方法: 递归实现法 递归是最直观的实现方式,通过函数自身调用来遍历子分类。数…