《 Python程序设计项目案例》— 用Python开发的基于TCP通讯协议的私人聊天室 (期末大作业、结课作业、课程设计、毕业设计)
基于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 用戶登錄
?
示例:
test:0表示校驗成功,1表示校驗失敗
op:0表示用戶登錄
?
示例
4.2.2 用戶發送驗證碼
1.用戶端發送
示例:
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做了顏色動態變換的特效,
將各種顏色代碼存入列表,再使用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通讯协议的私人聊天室 (期末大作业、结课作业、课程设计、毕业设计)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微型计算机原理daa,单片微机原理、汇编
- 下一篇: 数学家刘徽的故事