日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

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

發布時間:2023/12/15 python 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《 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 用戶登錄

  • 客戶端用戶登錄校驗
    ?
    示例:
  • { op:0,args:{user\_name:152xxxxxx89user\_pwd:}
  • 服務端發送:
    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通讯协议的私人聊天室 (期末大作业、结课作业、课程设计、毕业设计)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。