基于Python与TCP协议的私人聊天室(GUI交互界面,用户注册、用户登录、实时聊天,文件上传与下载)

用Python开发的基于TCP通讯协议的实时聊天通讯和文件共享应用

目录

  • 基于Python与TCP协议的私人聊天室(GUI交互界面,用户注册、用户登录、实时聊天,文件上传与下载)
  • 用Python开发的基于TCP通讯协议的实时聊天通讯和文件共享应用
  • 1、项目概述:
  • 2、项目背景和意义
  • 3、项目组成及核心原理
    • 3.1 项目总体框架
    • 3.2 项目核心算法设计
      • 3.2.1 用户信息表
      • 3.2.2 文件存储表
  • 4、项目详细设计
    • 4.1 基于TCP的自拟通讯协议
    • 4.2 通信格式
      • 4.2.1 用户登录
      • 4.2.2 用户发送验证码
    • 4.3 用户注册
      • 4.3.1 手机号验证
      • 4.3.2 正则验证
      • 4.3.3 密码加密存储
    • 4.4 用户登录
    • 4.5 聊天界面
    • 4.6 文件共享
  • 5、界面效果图
  • 6、总结
  • 7、项目代码
  • 更多内容

1、项目概述:

  在如今的大数据时代,科技飞速发展,人们的生活逐渐变得便利快捷,大家都更喜欢简单方便快捷的东西,从以前的车马很慢,到现在的实时通讯沟通,让言语不拘于距离,不止于步伐。为了满足工作生活的的需求,提高工作效率,学习效率,而又不在拘泥于距离。

  针对以上问题,本项目以Python为开发语言,采用轻量tkinter作为前GUI端页面对每个单元功能板块进行设计,多线程进行各个功能实时并行,人性化美观的人机交互界面,数据以json格式TCP协议为基础,自定协议进行响应传输,利用mysql对用户数据进行存储修改,为了和现在的信息时代的特点个性符合,同时也具备严密的登录和注册功能,实现在线聊天和文件共享。

2、项目背景和意义

  通信产业有强劲的生命力,依然处在蓬勃发展阶段之中,各种新的技术日新月异,层出不穷。但是蓬勃的发展中也有一些亟待解决的问题,这些都是现代通信的不足。日新月异,通讯不止于书信,不止于电话,现代最方便最快捷的就是线上实时聊天通讯,能有效便捷的沟通,工作学习都将得到进一步的快速提升。

3、项目组成及核心原理

3.1 项目总体框架

(1).用户注册

(2).用户登录

(3).进入聊天实时通讯

(4).上传共享文件

(5).下载共享文件

3.2 项目核心算法设计

3.2.1 用户信息表

用户信息表utf8编码,主键为uid1

drop table user;
create table user (
uid1 int unsigned auto\_increment,
username varchar(20) not null unique,
password char(32) not null,
phone char(11) not null,
email char(32),
primary key(uid1)
)engine=InnoDB auto\_increment=1001 default charset=utf8;

Uid1: 用户id,唯一且不为空,自增长型,从1001开始增长。

Username:用户名,字符型,唯一且不为空。

Password:用户密码,字符型,不能为空。

Phone:用户手机号,字符型,可为空。

Email:用户邮箱,字符型,可为空。

3.2.2 文件存储表

文件存储表utf8编码,uid为主键

drop table file;
create table file (
uid int unsigned auto\_increment,
fliename varchar(20) not null,
own char(36) not null,
data char(50) not null,
lx char(32),
primary key(uid))engine=InnoDB auto\_increment=1 default charset=utf8;

Uid:文件id,自增长,从1开始。
Filename:文件名字,字符型,不可为空。
Own:上传文件的用户名称,字符型,不可为空。
Data:上传时间,字符型,不可为空。
Lx文件类型,字符型,可为空。

4、项目详细设计

4.1 基于TCP的自拟通讯协议

tcp特点
  面向连接:通信双方必须先建立连接才能进行数据的传输,双方都必须为该连接分配必要的系统内核资源,以管理连接的状态和连接上的传输。双方间的数据传输都可以通过这一个连接进行。完成数据交换后,双方必须断开此连接,以释放系统资源。这种连接是一对一的,因此TCP不适用于广播的应用程序,基于广播的应用程序请使用UDP协议。

  可靠传输:TCP采用发送应答机制,TCP发送的每个报文段都必须得到接收方的应答才认为这个TCP报文段传输成功,超时重传发送端发出一个报文段之后就启动定时器,如果在定时时间内没有收到应答就重新发送这个报文段。

  错误校验由发送端计算,然后由接收端验证,其目的是为了检测数据在发送端到接收端之间是否有改动,如果接收方检测到校验和有差错,则直接丢弃这个数据包。

(1). 基于TCP通信
(2). 定长包头
(3). json数据格式发
(4). 客户端主动发送请求,服务端回应请求
(5). 采用三个服务端,处理用户请求
(6). 验证注册服务端,聊天发送接收服务端,文件上传下载服务端

4.2 通信格式

4.2.1 用户登录

  1. 客户端用户登录校验

    示例:
 {
op:0,args:{user\_name:152xxxxxx89user\_pwd:}
  1. 服务端发送:
    test:0表示校验成功,1表示校验失败
    op:0表示用户登录

    示例
{
op:0,
test:0
}

4.2.2 用户发送验证码

1.用户端发送
示例:

 {op:0,test:0}

2.服务端响应
test:0表示成功,3表示手机号已存在,1表示网络问题,2表示手机号有问题
示例:
{
op:1,
test:0
}

4.3 用户注册

4.3.1 手机号验证

  用户注册模块使用了第三方库requests用于调用手机号发送验证码API接口,第三方平台为网易云信,用于验证手机号码,requests是使用Apache2 licensed 许可证的HTTP库。在python内置模块的基础上进行了高度的封装,从而使得python进行网络请求时,变得人性化,使用Requests可以轻而易举的完成浏览器可有的任何操作。现代,国际化,友好。requests会自动实现持久连接keep-alive。

4.3.2 正则验证

此外对于注册的每一个字段,都使用了正则表达式。

def test\_name(user\_name):if re.match("^\S{1,6}$",user\_name):a = Trueelse:a = Falsereturn adef test\_pwd(user\_pwd):if re.match("^\s\*?$",user\_pwd) or re.match("^[a-z]\*?$",user\_pwd) or re.match("^[0-9]\*?$",user\_pwd) or len(user\_pwd)\>16 or len(user\_pwd)\<12:a=Falseelse:a = Truereturn adef test\_email(user\_email):if re.match("^.\*?@.\*?\.([a-z]\*?)$",user\_email):a = Trueelse:a =Falsereturn adef test\_phone(user\_phone):if re.match("^1\d{10}$",user\_phone):a = Trueelse:a = Falsereturn a

  有着较为严密的标准,用户密码至少由数字和字母组合,最低6位,最高16位,用户名为任意非空字符,最短为1,最长为6的限制,以确保存入数据库的数据合法准确。

4.3.3 密码加密存储

  对存入的密码采用了md5加密方法,以确用户的重要隐私,不会泄露。Md5全称: message-digest algorithm 5翻译过来就是: 信息 摘要 算法5

在用户注册时,会将密码进行md5加密,存到数据库中。这样可以防止那些可以看到数据库数据的人,恶意操作了。

4.4 用户登录

  用户登录模块采用动态页面和特效使用了PIL第三方库,PIL(Python Image Library)是python的第三方图像处理库,但是由于其强大的功能与众多的使用人数,几乎已经被认为是python官方图像处理库了。其官方主页为:PIL。

  PIL历史悠久,原来是只支持python2.x的版本的,后来出现了移植到python3的库pillow,pillow号称是friendly fork for PIL,其功能和PIL差不多,但是支持python3。
  标题按钮,利用threading做了颜色动态变换的特效,

cc = ["#FFB6C1",'#FFC0CB', '#DC143C', '#FFF0F5', '#DB7093', '#FF69B4', '#FF1493', '#C71585', '#DA70D6', '#D8BFD8', '#DDA0DD', '#EE82EE', '#FF00FF', '#FF00FF', '#8B008B', '#800080', '#BA55D3', '#9400D3', '#9932CC', '#4B0082', '#8A2BE2', '#9370DB', '#7B68EE', '#6A5ACD', '#483D8B', '#E6E6FA', '#F8F8FF', '#0000FF', '#0000CD', '#191970', '#00008B', '#000080', '#4169E1', '#6495ED', '#B0C4DE', '#778899', '#708090', '#1E90FF', '#F0F8FF', '#4682B4', '#87CEFA', '#87CEEB', '#00BFFF', '#ADD8E6', '#B0E0E6', '#5F9EA0', '#F0FFFF', '#E0FFFF', '#AFEEEE', '#00FFFF', '#00FFFF', '#00CED1', '#2F4F4F', '#008B8B', '#008080', '#48D1CC', '#20B2AA', '#40E0D0', '#7FFFD4', '#66CDAA', '#00FA9A', '#F5FFFA', '#00FF7F', '#3CB371', '#2E8B57', '#F0FFF0', '#90EE90', '#98FB98', '#8FBC8F', '#32CD32','#00FF00', '#228B22', '#008000', '#006400', '#7FFF00', '#7CFC00', '#ADFF2F', '#556B2F', '#9ACD32', '#6B8E23', '#F5F5DC', '#FAFAD2', '#FFFFF0', '#FFFFE0', '#FFFF00', '#808000', '#BDB76B', '#FFFACD', '#EEE8AA', '#F0E68C', '#FFD700', '#FFF8DC', '#DAA520', '#B8860B', '#FFFAF0', '#FDF5E6', '#F5DEB3', '#FFE4B5', '#FFA500', '#FFEFD5', '#FFEBCD', '#FFDEAD', '#FAEBD7', '#D2B48C', '#DEB887', '#FFE4C4', '#FF8C00', '#FAF0E6', '#CD853F', '#FFDAB9', '#F4A460', '#D2691E', '#8B4513', '#FFF5EE', '#A0522D', '#FFA07A', '#FF7F50', '#FF4500', '#E9967A', '#FF6347', '#FFE4E1', '#FA8072', '#FFFAFA', '#F08080', '#BC8F8F', '#CD5C5C', '#FF0000', '#A52A2A', '#B22222', '#8B0000', '#800000', '#FFFFFF', '#F5F5F5', '#DCDCDC', '#D3D3D3', '#C0C0C0', '#A9A9A9', '#808080', '#696969', '#000000']

  将各种颜色代码存入列表,再使用random对其进行随机变换。

4.5 聊天界面

  此功能实现主要运用了多线程以及以上基于TCP自拟的通讯协议进行实时聊天,为了严谨性每次发消息都会对用户身份进行识别鉴定。整体界面简洁且高效。

4.6 文件共享

  这部分整体都是基于TCP,整体问题都是因为TCP的特性,TCP:英文全拼(Transmission Control Protocol)简称传输控制协议,它是一种面向连接的、可靠的、基于字节流的传输层通信协议.TCP通信需要经过创建连接、数据传送、终止连接三个步骤。TCP通信模型中,在通信开始之前,一定要先建立相关的链接,才能发送数据,类似于生活中,打电话。

  Tcp最大的缺点,是传输速度过慢,但不是这一功能模块面对的问题,主要问题是数据流传输的形式会出现粘包,导致传输的文件不正确,这里我采用定长包头的方式,先发送文件大小,定长接收,根据文件大小计算接收次数,最后使用md5校对文件是否正确。

5、界面效果图

登录界面,背景以及颜色皆为动态,截图不能展现动态效果:

  注册界面截图,需输入用户名、密码、手机号、验证码以及邮箱

  聊天界面截图,支持多人聊天,类似于多人聊天群组或私密聊天室

  文件上传界面截图,可浏览文件或文件夹,完成上传

6、总结

  某信某q虽然好用,但是在这个信息时代隐私俨然已经成了问题,所以重要的工作和谈话使用自制的软件,还是比较具有隐秘性。

7、项目代码

  通过下面的链接地址,关注 2贰进制 ,并回复关键词,具体关键词可在下面链接地址对照列表查看:
链接地址:
https://mp.weixin.qq.com/s/ynG-dNNqO8kjIdf6ZFiZbg

更多内容

CSDN:
https://blog.csdn.net/meenr/article/details/121452685
简书地址:
https://www.jianshu.com/p/738e13966425

《 Python程序设计项目案例》— 用Python开发的基于TCP通讯协议的私人聊天室 (期末大作业、结课作业、课程设计、毕业设计)相关推荐

  1. 《 Python程序设计项目案例》— 人脸识别考勤可视化分析系统签到打卡记录到Excel表格项目参考代码(课程设计、期末结课大作业、毕业设计)

    声明 本文仅在CSDN发布,其他均为盗版.请支持正版! 正版链接: https://blog.csdn.net/meenr/article/details/107348867 Python课程设计(程 ...

  2. Python Socket联机自动匹配双人五子棋(含登录注册系统与界面,数据库连接,可作结课作业,可用于学习)

    1.前言 首先,关于源码的获取,本人提供了三种方式: 直接从文章里面Ctrl+C,Ctrl+V,然后按照我已给的文件结构搞一下即可: 通过积分下载上传到CSDN的资源: 点开本人的主页,点击" ...

  3. 《 Python程序设计项目案例》— (期末大作业、课程设计、毕业设计)基于Python与Django的职工健康档案管理系统设计(附代码)

    基于Python与Django的职工健康档案管理系统的设计与实现 本文对基于Python与Django的职工健康档案管理系统的开发做了简单的介绍:项目的概述.项目整体的框架结构.项目部分的组成设计.项 ...

  4. 【java毕业设计】基于java+原生Sevlet+socket的聊天室系统设计与实现(毕业论文+程序源码)——聊天室系统

    基于java+原生Sevlet+socket的聊天室系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+原生Sevlet+socket的聊天室系统设计与实现,文章末尾附有本毕业设 ...

  5. python代码怎么运行-Python程序执行原理,python程序怎么运行的?

    随着人工智能时代的来临,python成为了人们学习编程的首先语言.那么,python程序的程序的执行原理什么呢?python程序怎么运行的?我们下面来介绍下. 我们都知道,使用CC++之类的编译性语言 ...

  6. python程序-Python程序执行原理,python程序怎么运行的?

    随着人工智能时代的来临,python成为了人们学习编程的首先语言.那么,python程序的程序的执行原理什么呢?python程序怎么运行的?我们下面来介绍下. 我们都知道,使用CC++之类的编译性语言 ...

  7. java 项目 q a 表设计_《JAVA程序设计项目案例训练》期末试卷(A卷)..doc

    献给Java专业期末考试复习的同学 希望你们能考个好成绩 2010-2011学年第二学期哈尔滨华夏计算机职业技术学院期末考试 JAVA程序设计项目案例训练试题(A卷) 总分题号一二三四核分人题分402 ...

  8. python实现简易聊天需要登录博客园zip下载_Python基于Socket实现简易多人聊天室的示例代码...

    前言 套接字(Sockets)是双向通信信道的端点. 套接字可以在一个进程内,在同一机器上的进程之间,或者在不同主机的进程之间进行通信,主机可以是任何一台有连接互联网的机器. 套接字可以通过多种不同的 ...

  9. 基于小程序开发的宝可梦图鉴小程序源码课程设计毕业设计

    源码地址:基于小程序开发的宝可梦图鉴小程序源码课程设计毕业设计 宝可梦是一款备受喜爱的游戏,其丰富的剧情和可爱的角色深受玩家们的喜欢.而对于宝可梦爱好者来说,一款好的宝可梦图鉴是必不可少的.今天,我来 ...

最新文章

  1. 基于关联规则(Variational Autoencoders)疾病预测系统实战:(pyspark FPGrowth实现频繁项集挖掘、最后给出预测模型topK准确率和召回率)
  2. ELK+Kafka 企业日志收集平台(一)
  3. 解决ERROR 1044 (42000): Access denied for user
  4. Android Broadcast 和 BroadcastReceiver的权限限制
  5. SQL 引擎如何把语句转换为一个抽象语法树?
  6. 全网销售额超 2.67 亿!德施曼连续 5 年蝉联双11全网智能锁销冠
  7. 一步安装openssh的脚本
  8. 火爆全球的区块链到底是怎么一回事?一文带你看懂
  9. [渝粤教育] 广东-国家-开放大学 21秋期末考试组织行为学10068k2
  10. 如何删除oracle备份集,RMAN中删除OBSOLETE备份集问题
  11. word水印为什么被文字盖住了?
  12. 运放自激震荡的大杂烩总结
  13. oppo便签误删怎么办_oppo手机便签误删怎么办?oppo便签如何导入新手机
  14. python如何捕获指定异常_如何捕获Python中的异常
  15. 2010年01期《程序员》配套源码及相关链接
  16. 404未找到是什么意思_常见的web错误404你知道是什么意思吗?
  17. java 存储空间 简单分析
  18. python爬虫学习笔记(三)——淘宝商品比价实战(爬取成功)
  19. 一个游戏程序员的学习资料 (zz)
  20. Linux下Socket网络编程之点对点聊天室

热门文章

  1. 扎拉赞恩 服务器 微信群,《魔兽世界怀旧服》杜隆塔尔扎拉赞恩攻略 任务怎么玩...
  2. 光遇测试服怎么显示服务器错误,光遇服务器错误怎么办_光遇服务器错误解决方法_3DM手游...
  3. 【转载】数据(机器学习/深度学习)竞赛平台——Kaggle 置顶
  4. 【高项】第14章 信息文档管理与配置管理
  5. 在线制作html模板,快速建站 20个设计优秀的HTML网站模板(免费)
  6. RSR系列路由器密码恢复
  7. 关闭休眠扩大c盘空间
  8. Scrapy爬取斗破苍穹漫画
  9. 这段代码,c 1秒,java 9秒,c# 14秒,而python。。。
  10. Basler相机安装教程