当前位置:首页 > PHP

php socket实现聊天室

2026-02-13 21:59:05PHP

PHP Socket 实现聊天室

服务端代码

创建一个 server.php 文件,用于监听客户端连接并处理消息:

<?php
$host = '0.0.0.0';
$port = 8080;

$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_bind($socket, $host, $port);
socket_listen($socket);

$clients = [$socket];

while (true) {
    $read = $clients;
    $write = $except = null;
    socket_select($read, $write, $except, 0);

    if (in_array($socket, $read)) {
        $newClient = socket_accept($socket);
        $clients[] = $newClient;
        $key = array_search($socket, $read);
        unset($read[$key]);
    }

    foreach ($read as $client) {
        $data = socket_read($client, 1024);
        if ($data === false) {
            $key = array_search($client, $clients);
            socket_close($client);
            unset($clients[$key]);
            continue;
        }

        $data = trim($data);
        if (!empty($data)) {
            foreach ($clients as $sendClient) {
                if ($sendClient != $socket && $sendClient != $client) {
                    socket_write($sendClient, $data . "\n");
                }
            }
        }
    }
}
socket_close($socket);
?>

客户端代码

创建一个 client.php 文件,用于连接服务器并发送/接收消息:

<?php
$host = '127.0.0.1';
$port = 8080;

$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_connect($socket, $host, $port);

while (true) {
    $message = readline("Enter message: ");
    socket_write($socket, $message, strlen($message));

    $response = socket_read($socket, 1024);
    echo "Received: " . $response . "\n";
}
socket_close($socket);
?>

运行方法

  1. 启动服务端: 在终端运行 php server.php,服务端将开始监听指定端口。

  2. 启动多个客户端: 打开多个终端窗口,分别运行 php client.php,每个客户端可以发送和接收消息。

    php socket实现聊天室

功能说明

  • 服务端使用 socket_select 实现多客户端连接管理,避免阻塞。
  • 客户端通过 socket_readsocket_write 与服务端通信。
  • 服务端将接收到的消息广播给所有连接的客户端(除了发送者)。

注意事项

  • 确保服务器防火墙允许指定端口的通信。
  • 此示例为简化版本,实际应用中需添加错误处理和更多功能(如用户昵称、私聊等)。
  • 生产环境建议使用更成熟的解决方案(如 WebSocket)替代原生 Socket。

标签: 聊天室php
分享给朋友:

相关文章

php实现接口

php实现接口

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

php 实现单链表

php 实现单链表

单链表的基本概念 单链表是一种线性数据结构,由节点组成,每个节点包含数据域和指向下一个节点的指针域。链表的头节点是访问整个链表的入口。 单链表的节点类实现 在PHP中,可以通过类来定义链表节…

php 实现无限分类

php 实现无限分类

无限分类的实现方法 无限分类通常用于构建多层级结构的数据,如商品分类、菜单管理等。以下是几种常见的实现方式: 邻接列表模型(Adjacency List) 这是最简单的实现方式,每个分类记录存储其父…

php数据库实现

php数据库实现

PHP 连接 MySQL 数据库 使用 mysqli 扩展连接 MySQL 数据库: <?php $servername = "localhost"; $username = "usernam…

php 路由实现的

php 路由实现的

PHP 路由实现方法 基于原生 PHP 实现路由 创建一个简单的路由解析器,通过解析 URL 路径来调用对应的控制器或函数。 // 定义路由表 $routes = [ '/' => '…

php无法实现

php无法实现

PHP 是一种功能强大的服务器端脚本语言,能够实现多种功能,包括动态网页开发、数据库交互、文件操作等。如果遇到“无法实现”的问题,通常是由于以下原因之一: 环境配置问题 确保 PHP 环境正确安装和…