
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
1、开发起因
在无外网的情况下,实现局域网内的通信与文件的传输。
2、项目流程
项目开始 -->> 需求分析 -->> 需求确认 -->> 总体设计 -->> 详细设计 -->> 代码编写 -->> 模块测试 -->> 整体测试 -->> 结束
3、功能介绍
用户可以进行注册、登陆、进入功能界面
主功能界面包含:个人信息,加好友,查看好友列表,私聊,发起群聊,解散群聊。可以删除好友,查看聊天记录,文件上传下载操作,可以显示好友是否在线,包括一款休闲小游戏--飞机大战。
4、主要模块
登陆模块 -->> 注册模块 -->> 通信模块 -->> 服务器文件上传与下载模块 -->> 游戏模块 -->> 好友添加模块 -->> 项目信息模块
5、技术实现
GUI使用PyQt5+QSS设计页面,后端采用多进程和TCP(SOCK_STREAM提供通信与数据传输
第二阶段
1、注册登陆流程设计图:
2、数据库设计图:
3、文件上传下载设计图:
4、游戏模块概览:
第三阶段
1、难点功能设计思路(参考实现):
加好友:
有客户端1和客户端2,服务器,客户端1要加客户端2为好友,先向服务器发送请求,服务器根据客户端1发送的客户端2的用户名在在线用户链表中查找,是否存在该账号,如果找到客户端2的账号,就根据客户端2的套接字信息,向客户端2发送信息,客户端2这边收到消息,提醒他到消息中心(自定义的消息队列,用于存放各种请求和消息)查看添加好友信息。客户端2这边处理完后,再发送给服务器,服务器再根据客户端1的用户名查找其套接字信息,将结果返回给客户端1。这是在理想情况下,实现的加好友简单思路。
如果在用户表中并没有找到客户端2的信息,服务器就将结果 直接返回给客户端 -1。
私聊:
私聊的前提必须是,要聊的对象必须存在,必须为自己的好友。客户端1将消息发送给服务器,服务器同样在在线用户链表中检查对象用户是否在线,不在线的话,存为对象用户的离线消息。在线的话,就根据对象用户的套接字将数据包发给对象用户,在在线用户这边用标志设置判断用户是否处于私聊状态,不处于私聊状态,就用消息队列将消息保存,并提醒该用户到消息盒子查看私聊消息。否则的话,就将私聊消息打印在屏幕上。
多客户端:
虽然是多进程,但是客户端只能登陆一个
原因:客户端由于有4个地方需要连接服务器,于是把套接字设置成了全局变量
解决办法:每个需要连接服务器的地方都分别设置套接字,每个功能都是一个新的进程。
Ui界面跳转:
把ui文件转换传成py文件后,在需要点击跳转的按钮下,通过绑定信号槽,函数调用连接下级页面,实现点击按钮跳转到另外一个函数
用户图像存储:
原因:python3图像存储的表格的字段设置了varchar、text等等数据类型都是不成功的
解决办法:通过查找文档得知mysql数据库存二进制字节流要用特殊的方法,不能用那些通常的数据类型,需要使用mediumblob这个数据类型,是专门用来存储图片类的类型,从而实现了用户图像的存储
游戏模块:
在给敌机增加血条属性的时候出现打不死的僵尸敌机,大中型敌机在被消灭一次后再次从精灵组中出现就会变成僵尸飞机。
原因:僵尸飞机初现时血条为0,无论怎么打击都不会被摧毁
解决方法:在敌机被消灭后复活时将血条也恢复到初始状态
【免责声明】本文部分系转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与联系我们,我们会予以更改或删除相关文章,以保证您的权益!