Project name: LiQ (LiQ 即时通讯软件)
Creation date: 2020-2-26
Update date: 2020-3-5 21:30
Version: 1.0
Complier: Qt-4.8.7 / Qt 5.9.9 (Clinet) and g++6.3.0 (Server)
Language: c++11
Author: I0gan (徐绿国)
Plateform: Linux/Windows
Project Indroduction:
基于上一代Litalk做的第二个项目, 本来打算只是基于上一代修改一下UI界面,服务端框架还是用以前的, 做好客户端后,
想想还是采用mysql自己的接口实现服务端, 服务端通讯全部采用Linux下的原生接口, 编译器为g++ 6.3.0, c++11开发.
前一代Litalk 与Liq比较:
Litalk:
比较怪的UI界面, 整个通讯协议采用UDP进行传输, 发送包为明文字符串, 采用一些特殊符号进行分割字符串解包.很不安全, 而且效率低下, 使用Mysql来储存用户信息, 且储存用户的IP与端口, 每发一条消息就需要访问一次数据库, 效率大大折扣,不支持选着头像.
服务端采用QT的接口, 依赖环境较高.
LiQ:
模仿QQ做的比较人性化的UI界面, 采用TCP进行安全加密登录, 登录验证成功后会从服务端获取一个checkCode, 用于安全修改信息的
验证代码, 发送消息采用UDP发送, 使用链表储存用户的通讯地址,发送消息时候只需遍历链表即可获得用户的通讯地址, 这样效率就有所
提高, 与上一代最大区别在于, 这个项目比较工程化, 采用二进制加密传输, 拥有数据结构,解包时更快, 采用mysql官方的c语言接口和原生Linux网络通讯接口函数, 效率上会有所提高, 运行环境不依赖于Qt, 使用多进程和多线程实现服务器高并发多处理,主要还是以多线程为主.
目前功能: 模拟QQ界面, 能够注册用户, 用户能够修改固定的一些头像.且用户信息增多
增强了服务端的稳固性, 安全性,高效性.
让我来介绍一下它目前的功能:
- 注册登录帐号
- 开发中...
使用:
本项目基本很多宏定义全部在 liq.h(服务端) liqbase.h(客户端)
里面有对应的很多信息和数据结构.修改相应的IP与端口即可.
服务端:
Linux平台. 可以从阿里云或者其他平台购买服务器,安装Mysql开发库: sudo apt install libmysql++-dev 还有g++6.0以上版本
然后插入下面的表,使用make编译即可.
客户端:
Linux平台:
我是采用QT5编译器开发的,想到以后在Windows上发布, 还是采用QT4的语法进行开发,希望能使用Qt5进行编译
数据库表结构:
create table users(uid int primary key auto_increment,account varchar(32),password varchar(256),nickname varchar(255),headImage varchar(255),email varchar(64), phoneNumber varchar(32), signature varchar(255),birth varchar(64), gender int,grade int,platform varchar(64),network int,lastlogin varchar(64));
//nop number of person
create table groups(gid int primary key auto_increment,account varchar(32),name varchar(255),headImage varchar(255),hacc varchar(32),files varchar(255),announcement varchar(255),nop int);
create table user_friend(id int primary key auto_increment,uacc varchar(32),facc varchar(32),remark varchar(255), uid int, fid int);
create table group_user(id int primary key auto_increment,gacc varchar(32),uacc varchar(32), gid int, uid int);
create table pendtodo(id int(32) primary key auto_increment,cmd int,uacc varchar(32),facc varchar(32), gacc varchar(32), msg varchar(512), created_days int);