项目简介
本项目是基于C++语言开发的服务端和客户端通信项目。采用带SSL的gRPC通信框架,实现服务端与客户端间的安全通信。主要功能为注册登录,采用单终端独占登录策略,即一个用户同一时间只能在一个设备上登录,切换终端登录时,其他已登录的终端会被踢出。服务端使用MySQL数据库存储用户信息,并用bcrypt对用户密码进行单向加密。同时运用bazel编译和管理项目,gtest进行单元测试编写。
项目的主要特性和功能
- 用C++编写服务端和客户端代码,确保高性能与稳定性。
- 采用gRPC通信框架实现服务端与客户端的通信。
- 运用SSL加密通信,保障数据传输安全。
- 实现注册和登录功能,支持用户密码的加密存储与验证。
- 采用单终端独占登录策略,保证用户同一时间仅能在一个设备登录。
- 使用MySQL数据库存储用户信息,支持数据持久化。
- 用bcrypt对用户密码进行单向加密,提升数据安全性。
- 利用bazel编译和管理项目,提高开发效率。
- 使用gtest编写单元测试,提高代码质量和可维护性。
安装使用步骤
假设用户已下载本项目的源码文件,按以下步骤操作:
1. 执行建库语句
sql
DROP TABLE IF EXISTS `user_info`;
CREATE TABLE `user_info` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(255) NOT NULL,
`password` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `idx_username` (`username`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=50001 DEFAULT CHARSET=latin1;
2. 修改数据库地址:打开app_server.cpp
,修改以下内容
cpp
Db *db = new Db("db",3306,"root","545347837","test");
参数依次为数据库地址、数据库端口、登录用户、密码、实例名称。
3. 编译项目:回到WORKSPACE项目目录,执行命令(cmake后面的点不能去掉)
sh
bazel build main:all
4. 生成通信秘钥:由于项目使用了SSL进行通信加密,需生成公私钥,依次执行下述语句
sh
mkdir -p /home/config/client
mkdir -p /home/config/server
cd /home/config
openssl genrsa -passout pass:123 -des3 -out ca.key 4096
openssl req -passin pass:123 -new -x509 -days 365 -key ca.key -out ca.crt -subj "/C=CN/ST=CA/L=Cupertino/O=YourCompany/OU=YourApp/CN=MyRootCA"
openssl genrsa -passout pass:123 -des3 -out server.key 4096
openssl req -passin pass:123 -new -key server.key -out server.csr -subj "/C=CN/ST=CA/L=Cupertino/O=YourCompany/OU=YourApp/CN=localhost"
openssl x509 -req -passin pass:123 -days 365 -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crt
openssl rsa -passin pass:123 -in server.key -out server.key
openssl genrsa -passout pass:123 -des3 -out client.key 4096
openssl req -passin pass:123 -new -key client.key -out client.csr -subj "/C=CN/ST=CA/L=Cupertino/O=YourCompany/OU=YourApp/CN=FengJun"
openssl x509 -passin pass:123 -req -days 365 -in client.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out client.crt
openssl rsa -passin pass:123 -in client.key -out client.key
mv client_privatmv client_privatekey.pem client/
mv client_self_signed_crt.pem client/
mv server_self_signed_crt.pem client/
mv client_self_signed_crt.pem server/
mv server_privatekey.pem server/
mv server_self_signed_crt.pem server/
服务端和客户端默认读取/home/config/
下的文件。
5. 运行项目
- 服务端:./bazel-bin/main/app_server
- 客户端:./bazel-bin/main/app_client
下载地址
点击下载 【提取码: 4003】【解压密码: www.makuang.net】