云计算百科
云计算领域专业知识百科平台

在Windows子系统WSL(Linux)中用C++搭建简单聊天服务器

Tiny Bridge — Chat Pool

在Windows子系统WSL(Linux)中用C++搭建简单聊天服务器

仓库地址:https://github.com/Leo072060/Chat-Pool

在这里插入图片描述

项目简介

支持多用户在线实时聊天,消息通过服务器高效转发,确保所有用户同步接收最新聊天内容。

HTTP服务器 采用C++实现,支持处理常见的HTTP请求(如GET、POST),能够解析浏览器请求并生成对应的HTTP响应,确保与客户端的高效交互。 实现日志的写入,方便HTTP服务器调试。

进程间通信 通过进程套接字(IPC Socket)实现服务器与事务处理模块之间的高效通信,确保数据传递的可靠性与实时性。

前端页面 提供简易的聊天页面,用户可以通过浏览器访问并参与聊天。

网络 通过配置WSL镜像网络,并结合内网穿透技术,实现外网对本地服务的无缝访问,确保聊天服务器能够在广域网中正常运行。

项目结构

|—— include
| |—— 头文件(.h 文件)
|—— src
| |—— httpd
| | |—— 处理 HTTP 请求的源代码文件
| |—— message
| | |—— 实现简单的类似 JSON 功能的源代码文件
| |—— transaction
| | |—— 事务处理的源代码文件
|—— CMakeLists.txt
|—— build
| |—— httpd
| | |—— index.html
|—— .clang-format

运行说明

  • 进入 build 目录

    在项目根目录下执行以下命令:

    cd build

  • 生成构建文件

    使用 cmake 生成构建文件:

    cmake ..

  • 编译项目

    使用 make 编译项目:

    make

  • ​ 此时在build目录下出现HTTPD和transaction两个可执行程序。

  • 启动事务处理服务器(源码中设置运行在7002端口)

    在 build 目录下运行事务处理服务器:

    ./transaction

  • 运行HTTP 服务

    在 build 目录下启动 HTTP 服务器(源码中设置运行在7001端口):

    ./HTTPD

  • 启动HTTP服务

    twh@TWH:~/TinyBridge/build$ ./HTTPD
    ——————————————-
    | Command List: |
    | 1. start – Start the server |
    | 2. stop – Stop the server |
    | 3. exit – Exit the console |
    ——————————————-
    Enter command: start
    Starting server on port 7001...
    ——————————————-
    | Command List: |
    | 1. start – Start the server |
    | 2. stop – Stop the server |
    | 3. exit – Exit the console |
    ——————————————-
    Enter command: stop
    Stopping server on port 7001...
    ——————————————-
    | Command List: |
    | 1. start – Start the server |
    | 2. stop – Stop the server |
    | 3. exit – Exit the console |
    ——————————————-
    Enter command: exit
    Exiting console...

  • 打开wsl setting设置Windows子系统wsl的网络模式为镜像

  • 在这里插入图片描述

    在这里插入图片描述

    此时wsl与Windows便共用一个IP地址。

  • 此时在浏览器输入http://localhost:7001/便可以访问网页

    其他设备在浏览器输入[主机IP]:7001也可以访问网页。

    但此时由于我们使用的不是公网IP,所以如果分享给不在我们局域网内的小伙伴,则会访问不到。申请公网IP比较麻烦,而使用内网穿透技术可以简单实现公网访问。

  • 查看HTTP服务器日志

    在这里插入图片描述

  • 内网穿透

    我使用的是贝锐花生壳内网穿透|ddns动态域名解析|端口映射工具-贝锐花生壳官网来进行内网穿透的。

    将主机IP映射到分配的网站域名即可实现公网访问。

    在这里插入图片描述

    异常处理

    wsl网络设置

    新版 WSL2 2.0 设置 Windows 和 WSL 镜像网络教程_wsl网络设置-CSDN博客

    端口阻塞

    建议在退出HTTP服务器控制台之前先执行stop命令关闭TCP套接字。

    twh@TWH:~/TinyBridge/build$ ./transaction
    terminate called after throwing an instance of 'std::runtime_error'
    what(): Failed to bind socket
    Aborted (core dumped)

    使用 lsof 和 kill 命令

  • 查找占用端口的进程 使用 lsof 命令查找占用指定端口的进程:

    lsof -i :端口号

    例如,查找占用端口 8080 的进程:

    lsof -i :8080

    输出示例:

    COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
    node 12345 user 20u IPv6 123456 0t0 TCP *:http-alt (LISTEN)

    其中,PID 是进程 ID。

  • 杀死进程 使用 kill 命令杀死进程:

    kill -9 PID

    例如,杀死 PID 为 12345 的进程:

    kill -9 12345

  • 强制杀死进程(如果 kill 无效) 如果 kill 命令无效,可以尝试强制杀死进程:

    kill -9 $(lsof -t -i :端口号)

    例如,强制杀死占用端口 8080 的进程:

    kill -9 $(lsof -t -i :8080)

  • 其他

    此项目是本人在学习计算机网络的时候突发奇想构建的,整体比较简洁,欢迎大家多多提建议,多多star!

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » 在Windows子系统WSL(Linux)中用C++搭建简单聊天服务器
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!