当前位置:首页 > PHP

php实现socket

2026-01-13 12:45:48PHP

php实现socket

PHP 实现 Socket 通信

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

创建 TCP 服务器

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

// 绑定 IP 和端口
$bind = socket_bind($socket, '0.0.0.0', 8080);
if ($bind === false) {
    die("绑定失败: " . socket_strerror(socket_last_error()));
}

// 监听连接
$listen = socket_listen($socket, 5);
if ($listen === false) {
    die("监听失败: " . socket_strerror(socket_last_error()));
}

echo "服务器启动,等待客户端连接...\n";

// 接受客户端连接
$client = socket_accept($socket);
if ($client === false) {
    die("接受连接失败: " . socket_strerror(socket_last_error()));
}

// 读取客户端数据
$data = socket_read($client, 1024);
echo "接收到客户端消息: " . $data . "\n";

// 发送响应
$response = "Hello, Client!";
socket_write($client, $response, strlen($response));

// 关闭连接
socket_close($client);
socket_close($socket);

创建 TCP 客户端

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

// 连接服务器
$connect = socket_connect($socket, '127.0.0.1', 8080);
if ($connect === false) {
    die("连接失败: " . socket_strerror(socket_last_error()));
}

// 发送数据
$message = "Hello, Server!";
socket_write($socket, $message, strlen($message));

// 接收响应
$response = socket_read($socket, 1024);
echo "服务器响应: " . $response . "\n";

// 关闭连接
socket_close($socket);

创建 UDP 服务器

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

// 绑定 IP 和端口
$bind = socket_bind($socket, '0.0.0.0', 8080);
if ($bind === false) {
    die("绑定失败: " . socket_strerror(socket_last_error()));
}

echo "UDP 服务器启动,等待数据...\n";

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

// 发送响应
$response = "Hello, UDP Client!";
socket_sendto($socket, $response, strlen($response), 0, $from, $port);

// 关闭 Socket
socket_close($socket);

创建 UDP 客户端

// 创建 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, '127.0.0.1', 8080);

// 接收响应
socket_recvfrom($socket, $response, 1024, 0, $from, $port);
echo "服务器响应: " . $response . "\n";

// 关闭 Socket
socket_close($socket);

错误处理

Socket 操作可能因网络问题或配置错误失败,建议通过 socket_last_error()socket_strerror() 捕获并处理错误。

if ($socket === false) {
    $error = socket_strerror(socket_last_error());
    die("操作失败: " . $error);
}

注意事项

  • 确保 PHP 已启用 socket 扩展(检查 php.iniextension=sockets)。
  • 服务器需开放对应端口(如 8080),防火墙可能拦截连接。
  • TCP 是面向连接的协议,需先建立连接;UDP 是无连接的,直接发送数据包。
  • 多客户端场景下,服务器需使用循环或异步处理(如 socket_select)。

php实现socket

标签: phpsocket
分享给朋友:

相关文章

php实现树

php实现树

PHP实现树结构的方法 在PHP中实现树结构通常可以通过递归或迭代的方式完成。以下是几种常见的实现方法: 递归实现树结构 递归是处理树结构的自然方式,尤其适用于具有未知深度的树。 class…

php实现图片上传

php实现图片上传

实现图片上传的基本步骤 创建HTML表单用于文件上传,表单需设置enctype="multipart/form-data"属性,确保文件数据正确传输。 <form action="uploa…

php实现搜索

php实现搜索

PHP实现搜索功能的方法 在PHP中实现搜索功能通常涉及数据库查询和用户输入的匹配。以下是几种常见的实现方式: 使用MySQL LIKE语句 通过简单的LIKE语句实现基础搜索: $searc…

php实现即时通讯

php实现即时通讯

PHP 实现即时通讯的方案 即时通讯(IM)可以通过多种方式实现,PHP 作为服务器端语言,通常需要结合前端技术(如 WebSocket、AJAX)或第三方服务来实现实时通信。以下是几种常见的实现方式…

php 实现秒杀

php 实现秒杀

PHP 实现秒杀的关键技术 秒杀系统需要解决高并发、超卖、性能瓶颈等问题。以下是实现秒杀的核心方案: 使用 Redis 预减库存 将商品库存提前加载到 Redis 中,通过原子操作保证库存准确性:…

php实现统计

php实现统计

PHP 实现统计功能 在 PHP 中实现统计功能通常涉及数据的收集、处理和展示。以下是一些常见的统计实现方法: 数据库数据统计 通过 SQL 查询可以直接从数据库中获取统计结果: $conn =…