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

打印 上一主题 下一主题

主题 2091|帖子 2091|积分 6273

Tiny Bridge — Chat Pool

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

堆栈地点:https://github.com/Leo072060/Chat-Pool

项目简介

支持多用户在线及时聊天,消息通过服务器高效转发,确保所有用户同步接收最新聊天内容。
HTTP服务器
采用C++实现,支持处置惩罚常见的HTTP哀求(如GET、POST),能够解析浏览器哀求并生成对应的HTTP相应,确保与客户端的高效交互。
实现日志的写入,方便HTTP服务器调试。
进程间通讯
通过进程套接字(IPC Socket)实现服务器与事务处置惩罚模块之间的高效通讯,确保数据传递的可靠性与及时性。
前端页面
提供简易的聊天页面,用户可以通过浏览器访问并到场聊天。
网络
通过配置WSL镜像网络,并结合内网穿透技术,实现外网对当地服务的无缝访问,确保聊天服务器能够在广域网中正常运行。
项目布局

  1. |—— include
  2. |    |—— 头文件(.h 文件)
  3. |—— src
  4. |    |—— httpd
  5. |    |    |—— 处理 HTTP 请求的源代码文件
  6. |    |—— message
  7. |    |    |—— 实现简单的类似 JSON 功能的源代码文件
  8. |    |—— transaction
  9. |    |    |—— 事务处理的源代码文件
  10. |—— CMakeLists.txt
  11. |—— build
  12. |    |—— httpd
  13. |    |    |—— index.html
  14. |—— .clang-format
复制代码
运行说明


  • 进入 build 目录
    在项目根目录下执行以下命令:
    1. cd build
    复制代码
  • 生成构建文件
    使用 cmake
    生成构建文件:
    1. cmake
    2. ..
    复制代码
  • 编译项目
    使用 make
    编译项目:
    1. make
    复制代码
​ 此时在build目录下出现HTTPD和transaction两个可执行程序。

  • 启动事务处置惩罚服务器(源码中设置运行在7002端口)
    在 build 目录下运行事务处置惩罚服务器:
    1. ./transaction
    复制代码
  • 运行HTTP 服务
    在 build 目录下启动 HTTP 服务器(源码中设置运行在7001端口):
    1. ./HTTPD
    复制代码
  • 启动HTTP服务
    1. twh@TWH:~/TinyBridge/build$ ./HTTPD
    2. -------------------------------------------| Command List:                           || 1. start        - Start the server      || 2. stop         - Stop the server       || 3. exit         - Exit the console      |-------------------------------------------Enter command: startStarting server on port 7001...-------------------------------------------| Command List:                           || 1. start        - Start the server      || 2. stop         - Stop the server       || 3. exit         - Exit the console      |-------------------------------------------Enter command: stopStopping server on port 7001...-------------------------------------------| Command List:                           || 1. start        - Start the server      || 2. stop         - Stop the server       || 3. exit         - Exit the console      |-------------------------------------------Enter command: exitExiting 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套接字。
  1. twh@TWH:~/TinyBridge/build$ ./transaction
  2. terminate called after throwing an instance of 'std::runtime_error'  what():  Failed to bind socketAborted (core dumped)
复制代码
使用 lsof 和 kill 命令

  • 查找占用端口的进程
    使用 lsof 命令查找占用指定端口的进程:
    1. lsof -i :端口号
    复制代码
    比方,查找占用端口 8080 的进程:
    1. lsof -i :8080
    复制代码
    输出示例:
    1. COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    2. node    12345  user   20u  IPv6 123456      0t0  TCP *:http-alt (LISTEN)
    复制代码
    其中,PID 是进程 ID。
  • 杀死进程
    使用 kill 命令杀死进程:
    1. kill -9 PID
    复制代码
    比方,杀死 PID 为 12345 的进程:
    1. kill -9 12345
    复制代码
  • 逼迫杀死进程(如果 kill 无效)
    如果 kill 命令无效,可以实验逼迫杀死进程:
    1. kill -9 $(lsof -t -i :端口号)
    复制代码
    比方,逼迫杀死占用端口 8080 的进程:
    1. kill -9 $(lsof -t -i :8080)
    复制代码
其他

此项目是本人在学习计算机网络的时候突发奇想构建的,团体比力简洁,接待各人多多提建议,多多star!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

守听

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表