当前位置:首页 > PHP

php socket实现聊天室

2026-02-13 21:59:05PHP

PHP Socket 实现聊天室

服务端代码

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

php socket实现聊天室

<?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 socket实现聊天室

<?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,每个客户端可以发送和接收消息。

功能说明

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

注意事项

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

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

相关文章

php实现socket

php实现socket

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

php验证码实现

php验证码实现

验证码实现方法 在PHP中实现验证码功能通常涉及生成随机字符串或数字,将其转换为图像,并通过会话(Session)进行验证。以下是几种常见的实现方式: 使用GD库生成图像验证码 GD库是PHP内置的…

php购物车实现

php购物车实现

PHP购物车实现方法 使用PHP实现购物车功能可以通过多种方式完成,以下是几种常见的实现方法: Session存储购物车数据 利用PHP的$_SESSION超全局变量存储购物车数据是最简单的方法。用…

php实现跳转

php实现跳转

PHP 实现页面跳转的方法 在 PHP 中实现页面跳转有多种方式,以下是常见的几种方法及其适用场景: 使用 header() 函数 通过 header() 函数发送 HTTP 头部信息实现跳转。注意…

php实现推送

php实现推送

PHP 实现推送功能的方法 PHP 实现推送功能可以通过多种方式完成,包括 WebSocket、Server-Sent Events (SSE)、长轮询或第三方推送服务。以下是几种常见的方法: 使用…

php搜索功能实现的

php搜索功能实现的

PHP 搜索功能实现方法 数据库搜索实现 使用 SQL 的 LIKE 语句进行模糊匹配,适用于小型网站和简单搜索需求。 $searchTerm = $_GET['search']; $query =…