Skip to content

ghost-him/CLCS

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

25 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CLCS

一个linux下,基于命令行的聊天软件

技术文档 | 更新日志

CLCS项目介绍

CLCS(Command Line Chat Software)是一个linux下的命令行软件, 采用了分布式的设计, 每一台电脑均可以当作一个服务器, 也可以当作一个客户端。

CLCS分为两个应用程序,一个是客户端,一个是服务端。客户端是用户使用的程序,服务端则是为其他用户提供服务的程序。可以将服务端存放在远程服务器上。这样就可以实现用户之间的远程交流了。

CLCS采用了c++作为编程语言, 采用git来实现版本管理,使用cmake作为构建系统。客户端和服务端均存放在同一个目录下,由同一个CMakeLists.txt来管理。

客户端与服务端采用tcp连接,其中服务端采用了epoll ractor模型,同时都使用了线程池来辅助程序的运行。由于epoll reactor使用了ET模式,同时我的水平还没有特别高,所以在运行时可能会出现不可预料的问题,我已经尽我的努力让出错的风险降低了。如果你发现了新的bug,欢迎联系我。

目前实现的功能还是比较单一的,受时间所限,暂时无法开发出更多功能了

目前客户端已经实现的功能有:

  1. 添加用户

  2. 重命名用户

  3. 发送消息

    1. 向指定的用户发送消息(加密)
    2. 向当前所在的群组中发送消息
  4. 接收用户发送的消息

  5. 重新连接服务器

  6. 重新设置目标服务器的地址

  7. 查看-

    1. 当前系统的时间
    2. 自己的uuid
    3. 当前已经添加的好友
    4. 当前程序与服务器的连接的状态
    5. 当前程序与服务器的延迟
    6. 当前是否在群组中
  8. 向服务器发送回调消息(服务器会将消息原封不动的返回)

  9. 群组

    1. 加入群组
    2. 退出群组
  10. 保存设置

  11. 退出程序

目前服务端已经实现的功能:

  1. 可操作
    1. 退出程序
  2. 不可操作
    1. 连接与客户端的连接
    2. 处理客户端发来的请求
    3. 向客户端发送信息流

程序安装方法

开发环境

当前的开发环境:

  • Linux version 5.19.1-3-MANJARO
  • gcc 版本 12.1.1 20220730 (GCC)
  • cmake version 3.23.3

要求的开发环境:

  • 支持c++20的标准
  • 支持cmake-B--build命令
  • 安装openssl开发环境
  • 安装libuuid
  • 安装json库(作者是nlohmann

安装步骤

不论是服务器还是客户端,都分为两步:

  1. 建立cmake的工作文件夹
cmake -B build
  1. 执行cmake的命令

服务端

cmake --build build --target=CLCS-server -j=8

-j的值可以根据你自己电脑上的核心的数量来改变

  1. 进入 ./build/CLCS-server 文件夹

  2. 运行CLCS-server(也可以将当前程序移动到其他地方启动, 启动的时候,程序会在当前的目录下生成工作文件夹)

  3. 进行初始化设置

语言: 看情况选择, 若无对应的语言文件, 则需要自己翻译, 语言文件在当前目录下的 `option/language` 文件夹中
ip与端口: 若无特殊需要, 跳过即可(ip将为当前可用ip, 端口将设置为6000)
  1. 程序开始运行

客户端

cmake --build build --target=CLCS-client -j=8
  1. 进入 build/CLCS-client 文件夹

  2. 运行CLCS-client(也可以将当前程序移动到其他地方启动, 启动的时候,程序会在当前的目录下生成工作文件夹)

  3. 进行初始化设置

语言: 看情况选择, 若无对应的语言文件, 则需要自己翻译, 语言文件在当前目录下的 `option/language` 文件夹中
ip与端口: 填写目标服务器的地址(ip + 端口)
  1. 程序开始运行

快速入门

客户端

命令展示

以下是在客户端中输入help命令弹出来的提示信息

add
  	添加指定的用户
  	add [uuid]
  
cat
  	查看信息
  	cat [参数]
  
  	connect
  		与服务器的连接状态
  
 	group
  		是否在群组中
  
  	latency
  		与服务器的延迟
  
  	time
  		当前系统的时间
  
  	user
  		当前已经保存的用户
  
  	uuid
  		自己的uuid
  
group
  	群组相关的操作
  
  	join
  		加入群组
  
  	leave
  		离开群组
  
help
  	输出此条信息
  
quit
  	退出程序
  
re_connect
  	重新连接目标服务器
  
recall
  	向服务器发送回调消息
  	recall [消息]
  
rename
  	更改用户的昵称
  	rename [uuid/旧昵称] [新昵称]
  
reset_target
  	重新设置目标服务器的ip和地址
 
save
 	保存设置
  
send
  	发送消息
    group
        向群组发送消息
  		send group [消息]
  
 	user
  		向用户发送消息
  		send user [uuid/昵称] [消息]

主要功能一:添加好友

1. 好友1 和 好友2连接到同一个服务器中

2. 好友1查看自己的uuid
(好友1输入)cat uuid
此时设好友1的uuid为51c44468-329e-4df6-8771-5d6350842ec5

3. 好友2添加好友1
(好友2输入)add 51c44468-329e-4df6-8771-5d6350842ec5
这样好友2就将好友1的公钥信息保存到了自己的本地

4. 好友2 重命名 好友1的昵称
(好友2输入)rename 51c44468-329e-4df6-8771-5d6350842ec5 user1
这样,好友1的昵称就设置为了user1

主要功能二:向好友发送hello

1. 好友1 和好友2连接到同一个服务器中

2. 好友2向好友1发送hello
(好友2输入)send user user1 "hello"

3. 此时好友1 的屏幕中则会显示出时间,好友2的昵称和消息内容,若好友2没有被好友1添加过, 则会自动添加好友2

主要功能三:进入群组并向群组发送消息

1. 加入当前服务器的群组
group join

2. 向服务器的群组中发送"hello world"
send group "hello world"

3.(可选)退出群聊
group leave

服务端

服务端主要的功能是用于转发客户端的消息。

命令展示

有两个命令可以使用:

quit  --- 退出并保存当前的程序

block --- 阻塞输入

将服务器放在后台运行

有两种办法

  1. 使用nohup命令
    1. nohup ./CLCS-server nohup ./CLCS-server
  2. 直接使用&
    1. ./CLCS-server -b &

阻塞了以后,如果想要重新输入,只需要输入 CTRL + C 即可恢复

小技巧:暂停消息的输出,使得自己可以完整的输入命令

如果当前没有任何状态(即没有阻塞消息的输入,也没有暂停消息的输出)时,按下ctrl-c键,即可暂停消息的输出,再次按下时即可恢复。

当消息出来的过于频繁以至于无法完整输入一个命令时可以运用此技巧。

安全性

Security Status

题外话

不知道下一次是什么时候再次开发这个软件了,应该是会在我考完研以后吧。。。

未来发展

目前处在一个早起的版本, 仅仅实现了基础的业务逻辑, 其他的比如历史记录等都暂时未开始制作

软件还没有跑过压力测试,或许以后可以想办法跑一下压力测试

下一次预计开发时间

2024.1.20 - 2024.1.25

TODO

当前版本(version 0.6.0)

  • ALL DONE!

下一个版本(version 0.7.0)

  • 添加历史记录
  • 添加文件传输

About

一个linux下,基于命令行的聊天软件

Resources

License

Stars

Watchers

Forks

Packages

No packages published