消息队列、socket(UDP)实现简易聊天系统

 前言:   最近在学进程间通信,所以做了一个小项目练习一下。主要用消息队列和socket(UDP)实现这个系统,并数据库存储数据,对C语言操作数据库不熟悉的可以参照我的这篇博客:https://www.cnblogs.com/liudw-0215/p/9593414.html,所有代码提交我的Github上,地址:https://github.com/ldw0215/Chat-System.git,可以自行下载,然后make一下就可以了。    一、项目要求 要求实现用户注册、用户登录功能,密码需加密显示 要求实现聊天功能,双方能互发消息 数据要求数据库存储   二、架构解析   主要流程图如下:        主要有客户端(用户)和服务端,客户端发送注册、登录请求,服务端回应请求,并且双方可以模拟聊天(互相发送消息),主要客户端请求界面见下图:      注册、登录使用消息队列进行通信的,聊天是通过socket(UDP)实现的!数据存在数据库中,需要一张数据表,建表数据语句如下:    复制代码 CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(64) NOT NULL DEFAULT '', `password` varchar(64) NOT NULL DEFAULT '', `check` varchar(64) NOT NULL DEFAULT '', PRIMARY KEY (`id`), UNIQUE KEY `name` (`name`) ) ENGINE=InnoDB AUTO_INCREMENT=52 DEFAULT CHARSET=utf8; 复制代码   三、客户端实现   client.c创建不同的消息队列的键,根据不同的消息类型的进行发送,并等待服务端响应,client.c代码如下:    View Code   注意,不同的通信,要用创建不同消息队列的键,并且消息类型也要不同!   四、服务端实现   服务端主要接送并响应客户端,主要创建不同的子进程,然后调用exec族函数,调用二进制文件,并通过消息队列接收阻塞执行,并建立信号,检测Ctrl+c信号,是进程退出,服务端响应截图如下:      其实现代码如下:    View Code   四、各模块及数据库解析   数据库是通过数据库函数实现的,需要头文件,并链上动态库-I/usr/include/mysql -L/usr/lib64/mysql -lmysqlclient,数据量比较小,之后还要考虑优化的问题;   注册、登录、聊天都是不同的.c文件生成二进制实现的:   注册通过消息队列接收用户名和密码存入数据库,代码如下:    View Code   登录也是通过消息队列接收用户名和密码,并从查询出数据,进行对比,是否可以登录,代码如下:    View Code      聊天是通过socket(UDP)实现的。   总结:通过做这种小项目学到了很多,也发现许多不足,最重要的就是架构能力,之前都是做一小块,没有大局观,虽然项目小,但五张俱全,很锻炼人,继续找项目做!    作者:柳德维 出处:https://www.cnblogs.com/liudw-0215/ ------------------------------------------- 个性签名:独学而无友,则孤陋而寡闻。做一个灵魂有趣的人! 如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢! 万水千山总是情,打赏一分行不行,所以如果你心情还比较高兴,也是可以扫码打赏博主,哈哈哈(っ•̀ω•́)っ✎⁾⁾!https://www.cnblogs.com/liudw-0215/p/9606604.html
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信