日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

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

python

基于python的安全即时通讯系统

發(fā)布時間:2023/12/20 python 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于python的安全即时通讯系统 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

資源下載地址:https://download.csdn.net/download/sheziqiong/85596120

資源下載地址:https://download.csdn.net/download/sheziqiong/85596120

Uchat——基于 python 的安全即時通訊系統(tǒng)

目的

設(shè)計完成簡易的安全即時通訊系統(tǒng),實現(xiàn)類似于 QQ 的聊天軟件;

需求分析

功能需求

  • 聊天客戶端

  • 注冊:用戶與集中服務(wù)器通信完成注冊,包括用戶名、密碼、郵箱、性別、年齡、數(shù)字證書等信息傳輸,其中數(shù)字證書包含公鑰、用戶名、郵箱等信息。私鑰單獨保存在客戶端一個文件夾下不進行傳輸;能顯示用戶名、郵箱不符合格式規(guī)范或者重復,空輸入等錯誤信息。
  • 認證登錄:客戶端與集中服務(wù)器通信完成用戶名、口令認證登錄;能顯示用戶名、密碼錯誤導致的登錄錯誤信息。還有已登錄賬號再次登錄時的多重登錄檢驗,并將之前登陸的賬號頂下去。
  • 好友管理:用戶可通過服務(wù)器進行搜索、添加、刪除好友。
  • 即時通信:用戶通過客戶端實現(xiàn)與好友的聊天,包括文字、圖片傳輸。文字可實現(xiàn)字體顏色和大小的改變。
  • 聊天記錄:客戶端能夠保存聊天記錄并且可以查看聊天記錄。
  • 消息加解密:采用 D-H 體制協(xié)商加密秘鑰,用對稱密碼 AES 算法進行加解密。
  • 消息摘要:使用 MD5 算法實現(xiàn)消息摘要認證功能,確保發(fā)送消息的完整性。
  • 用戶未讀消息提醒:紅點標注未讀消息數(shù)目,并按最后發(fā)送消息時間排列好友列表。
  • 用戶離線后消息處理:用戶上線后及時接收到離線時好友發(fā)送的消息。
  • 功能結(jié)構(gòu)圖

  • 集中服務(wù)器

  • 用戶注冊:與用戶通信完成注冊,對用戶名和郵箱格式、是否重復,輸入不規(guī)范等做必要的檢驗,接收客戶端的數(shù)字證書,發(fā)送服務(wù)端數(shù)字證書。
  • 登錄驗證:用戶登錄時,驗證用戶名和密碼是否正確,并向客戶端返回登錄結(jié)果。如信息正確,就將在線好友用戶發(fā)給該用戶,將該用戶的狀態(tài)發(fā)給各在線好友用戶,同時在服務(wù)器端顯示出來。
  • 用戶公鑰,證書提供:用戶向好友發(fā)送消息時,與服務(wù)器建立安全連接獲取好友的證書信息,服務(wù)器控制 client.socket 像好友用戶發(fā)送信息,實現(xiàn)用戶之間的通信。
  • 用戶在線狀態(tài)維護:當用戶在線時,記錄保存用戶的在線狀態(tài)、IP 地址、端口號。
  • 用戶消息列表實時發(fā)放:由監(jiān)聽函數(shù)將操作實時加入到執(zhí)行函數(shù)列表中遞歸執(zhí)行。向用戶發(fā)送其好友列表的在線離線情況,包括好友用戶名、IP 地址、端口號。并按照最后發(fā)消息的時間對好友消息列表進行排序。
  • 功能結(jié)構(gòu)圖

  • 高級功能

  • 離線用戶消息通知:暫時存儲離線用戶的消息,用戶上線后,顯示未讀的消息并用紅點標注;
  • 好友在線離線功能實時更新;
  • 限制賬號只能一處登錄:一個賬號只能在一處登錄,在別處登錄時會把原先的登錄踢下線;
  • 支持群聊功能:可以創(chuàng)建群聊,并根據(jù)群號加入群聊;
  • 聊天時字體大小顏色可更改;
  • 支持聊天各類圖像文件的緩存。
  • 數(shù)據(jù)需求

  • 客戶端

    客戶端登錄后加過的好友和加入的群聊需要從數(shù)據(jù)庫中調(diào)出信息并在前端反饋呈現(xiàn)出來??蛻舳说牧奶煊涗浛梢源鎯υ跀?shù)據(jù)庫中,用到時直接讀取返回消息歷史。

  • 集中服務(wù)器

  • users 表:用戶信息表,存儲用戶基本信息,包括用戶 ID(id)、用戶名(username)、密碼(password)、電子郵箱(email)、用戶登錄 IP 地址(ip)、用戶登錄端口(port)、性別(sex)、年齡(age)、公鑰(pk)。

    名稱數(shù)據(jù)類型主鍵是否唯一是否為空備注
    idINTEGERYYN用戶 id
    usernameTEXTNYN用戶名
    passwordTEXTNYN密碼
    emailTEXTNYN郵箱
    ipTEXTNYN登錄 IP
    portTEXTNYN登錄端口
    sexTEXTNYN性別
    ageTEXTNYN姓名
    pkTEXTNYN公鑰
  • friends 表:存儲用戶的好友信息,包括用戶 id(from_user_id)、好友 id(to_user_id)、加好友請求是否接受(accepted)。

    名稱數(shù)據(jù)類型主鍵是否唯一是否為空備注
    from_user_idINTEGERYYN本人 ID
    to_user_idINTEGERYYN好友 ID
    acceptBOOLEANNNN接受狀態(tài)
  • chat_history 表:存儲好友的聊天記錄,包括發(fā)送方 ID(user_id)、接收方(target_id)ID(target_type)、聊天數(shù)據(jù)(data)(BLOB 類型存儲二進制大對象,可以實現(xiàn)文件數(shù)據(jù)的直接存儲),sent(用于標識消息是否已發(fā)送,若未發(fā)送,先存儲這個操作,在某一次事件再次觸發(fā)時檢查標志位,操作服務(wù)端再次控制 client.socket 發(fā)送消息)。

    名稱數(shù)據(jù)類型主鍵是否唯一是否為空備注
    idINTEGERYYN消息 ID
    user_idINTEGERNNN用戶 ID
    target_idINTEGERNNN消息目標 ID
    target_typeTEXTNNN目標類型:群/用戶
    dataBLOBNNN消息體
    sentBOOLEANNNN發(fā)送是否成功
  • rooms 表:群組表,包括該群組的主鍵 ID(id)、群組的名稱(room_name)。

    名稱數(shù)據(jù)類型主鍵是否唯一是否為空備注
    idINTEGERYYN群聊 ID
    room_nameTEXTNYN群聊名
  • room_user 表:群組用戶表,包括群組的 ID,群聊房間號(room_id)、加入該群組的用戶(user_id)。

    名稱數(shù)據(jù)類型主鍵是否唯一是否為空備注
    idINTEGERYYNID
    room_idINTEGERNNN群聊 ID
    user_idINTEGERNNN用戶 ID
  • 性能需求

  • 可靠性需求

    保證一個用戶只能同時使用一個 IP 地址登錄,客戶端不會出現(xiàn)閃退、加密無效的情況。

  • 安全性需求

    客戶端做好完整的封裝;傳輸信息采用經(jīng)過公鑰加密機制協(xié)商的 AES 對稱加密秘鑰;服務(wù)器及時更新客戶端 IP 地址等信息。

  • 可維護性與可擴展性需求

    對于軟件功能方面,采用高內(nèi)聚低耦合的模塊化設(shè)計,包括登錄模塊、注冊模塊、好友列表模塊、聊天模塊等,確保每個模塊的具有較高的獨立性,使軟件源碼便于維護,同時便于后期添加聊天群等更多擴展內(nèi)容,保證軟件可以進行更新?lián)Q代。

  • 運行環(huán)境需求

  • 客戶端:python3

  • 服務(wù)端:

    python3

    PC 硬盤容量:50G

    運行內(nèi)存:2G

  • UI 需求

  • 頁面內(nèi)容:聊天字體大小和顏色可更改,主題突出,語言簡單明了易懂,菜單設(shè)置合理、頁面布局規(guī)范,文字準確,語言流暢。
  • 技術(shù)環(huán)境:頁面大小合適,無錯誤鏈接和空鏈接。
  • 藝術(shù)風格:界面版面形象清晰,布局合理,字號大小適宜,字體選擇合理,前后一致,動靜搭配恰當,色彩和諧自然,與主題內(nèi)容協(xié)調(diào)。
  • 操作需求

  • 所有彈出的窗口不超過一層,無層層堆疊的現(xiàn)象,不能無故為操作增加復雜度。
  • 用戶注冊、用戶登錄、添加好友、刪除好友聊天窗口的開啟等所有操作務(wù)必要簡單、快捷,限制在兩次點擊以內(nèi)。
  • 考慮到操作人員工作的實際環(huán)境狀況,就要保證設(shè)計的按鍵足夠的清晰足夠大。
  • 詳細設(shè)計

    系統(tǒng)結(jié)構(gòu)說明

    本系統(tǒng)的核心控制邏輯在于 C-S-C 之間發(fā)送的數(shù)據(jù)中包含了操作碼,接收方通過對接收碼的識別作出規(guī)定的操作。例如服務(wù)端接收添加好友的操作碼會執(zhí)行 add_friend.py。客戶端接收操作碼并不斷把對應(yīng)函數(shù)放入遞歸函數(shù)的隊列中,由遞歸函數(shù)逐一執(zhí)行隊列中的函數(shù)。

    系統(tǒng)主要分為三個部分:

    • 聊天客戶端(client)
    • 集中服務(wù)器(server)
    • 相互通信時的共同部分(common)
    Uchat │ config.json │ run_client.py │ run_server.py │ ├─client ││ __init__.py ││ │├─components ││ contact_item.py//聯(lián)系人列表UI ││ vertical_scrolled_frame.py//Tkinter可滾動框架 ││ __init__.py ││ │├─forms │││ chat_form.py//聊天界面及處理與聊天相關(guān)的事件 │││ contacts_form.py//聯(lián)系人列表 │││ login_form.py//登錄界面 │││ register_form.py//注冊界面 │││ __init__.py │││ ││└───images//背景圖片 ││ contacts_bg.gif ││ contacts_bg.png ││ login_bg.gif ││ register_bg.gif ││ VerticalScrolled.png ││ │├─memory ││ __init__.py//緩存數(shù)據(jù) ││ │└─util │ │ __init__.py │ └─ socket_listener │ __init__.py//監(jiān)聽socket的線程 │ ├─common ││ config.py//獲取配置信息 ││ global_vars.py//全局變量 ││ __init__.py ││ │├─cryptography ││ crypt.py//密鑰協(xié)商相關(guān)函數(shù) ││ prime.py//隨機生成一個大素數(shù) ││ __init__.py ││ │├─message ││ __init__.py//消息處理(消息類型定義,序列化過程等) ││ │├─transmission ││ secure_channel.py//安全信道的建立和傳輸 ││ __init__.py ││ │└─util │ │ __init__.py │ │ │ └─ socket_listener │ __init__.py//客戶端socket監(jiān)聽 │ └─server│ database.db│ main.sql│ __init__.py│├─broadcast│ __init__.py//廣播消息│├─event_handler│ add_friend.py//加好友│ bad.py//出現(xiàn)錯誤操作使程序走向可處理除0操作│ client_echo.py//測試CS通信│ create_room.py//創(chuàng)建群聊│ del_friend.py//刪除好友│ join_room.py//加入群聊│ login.py//登錄│ query_room_users.py//執(zhí)行群聊中發(fā)消息的操作register.py//注冊│ resolve_friend_request.py//處理加好友請求│ send_message.py//發(fā)消息│ __init__.py│├─memory│ __init__.py//緩存數(shù)據(jù)│└─util│__init__.py//添加對象類型│└─database__init__.py//數(shù)據(jù)庫操作
  • 聊天客戶端 client

    實現(xiàn)安全即時通信系統(tǒng)的客戶端,主要功能是通過界面與用戶實現(xiàn)交互;通過 socket 與集中服務(wù)器進行通信,獲得集中服務(wù)器的服務(wù),實現(xiàn)用戶的注冊登錄等功能。與好友即時通信和加入群聊通信。

  • 登錄模塊 LoginForm
    該模塊創(chuàng)建登錄界面并可鏈接到注冊界面,若輸入為空則報錯,否則將獲取用戶輸入的用戶名和密碼打包成登錄請求消息(MessageType.login)發(fā)送給服務(wù)器,服務(wù)器根據(jù)消息類型和數(shù)據(jù)包中的內(nèi)容以及在數(shù)據(jù)庫查找到的結(jié)果進行判斷,根據(jù)不同情況發(fā)送不同的反饋給客戶端??蛻舳耸盏椒答佅?#xff0c;若 data[‘type’]為 login_failed,則用戶名和密碼輸入有誤;若為 data[‘type’]為 login_successful 則根據(jù) memory 進入登錄后顯示好友列表的 ContractsForm 界面。
  • 注冊模塊 RegisterForm
    該模塊只有在登錄界面點擊注冊按鈕時才會顯示。通過注冊窗口獲得用戶輸出的個人信息:用戶名、密碼、郵箱、性別、年齡,若其中用戶名、郵箱、密碼為空或兩次密碼輸入不一致則會提示相應(yīng)的錯誤以引導用戶進行正確的輸入,否則將獲取用戶輸入打包成注冊請求消息(MessageType.register)發(fā)送給服務(wù)器。服務(wù)器查找數(shù)據(jù)庫判斷是否用戶名已經(jīng)注冊過,發(fā)送不同反饋給用戶,若 data[‘type’]為 username_taken,則用戶名已被注冊,若 data[‘type’]為 MessageType.register_successful 則注冊成功,并且在客戶端生成證書包含用戶的用戶名,郵箱,公鑰。
  • 主界面 ContactsForm
    該模塊在用戶登錄成功以后顯示。顯示好友列表中好友的用戶名、在線狀態(tài),ip 地址及端口號等。下方的按鈕有添加好友、刪除好友、添加群聊、創(chuàng)建群聊。可以點擊相應(yīng)的按鈕進行相應(yīng)的操作,發(fā)給服務(wù)器相應(yīng)的數(shù)據(jù)包,服務(wù)器接收到數(shù)據(jù)包后進行解析,根據(jù)不同類型進行 event_handler。若點擊好友列表或群聊即可跳出聊天界面進行聊天。未讀的消息會用紅點標注,根據(jù)最后一條消息的發(fā)送時間來對好友列表排序。
  • .聊天界面 ChatForm
    該模塊是用戶與好友聊天的界面。當用戶在好友列表中點擊好友列表時,即向好友發(fā)出聊天,服務(wù)器收到聊天請求后尋找對方的證書,找到對方的公鑰,雙方使用 Diffie-Hellman 算法協(xié)商算法,然后利用 AES 加密消息保證消息的機密性,MD5 生成消息摘要驗證保證消息的完整性。另外還可以更改聊天過程中字體的大小和顏色,支持多行輸入,支持發(fā)送文件,以圖片為例,將保存聊天過程中的接收到的圖片,并識別其格式。
  • 客戶端部件(components)模塊
    該模塊實現(xiàn) tkinter 靜態(tài)部件添加和滾動模塊的實現(xiàn)。
  • 客戶端 memory 管理模塊(memory)
    該模塊用于初始化 tkinter 對象 tk 的屬性,如窗口,secure_channel 對象等。
  • 多用(util)中的 socket_listener 模塊
    該模塊用于客戶端處理消息類型,文本或其他。以及不斷循環(huán)建立連接 socket 接收消息,實現(xiàn)數(shù)據(jù)包的完整接收。定義處理給好友框,消息框更新歷史消息的函數(shù),事件操作的監(jiān)聽函數(shù)和移除函數(shù),消息的監(jiān)聽函數(shù)和移除函數(shù)??梢詫崿F(xiàn)接收數(shù)據(jù)并且拼成塊,更新聊天的歷史記錄,通知客戶端更新 contacts 界面上的最后一條消息的內(nèi)容,時間,未讀消息的數(shù)目等。
  • 集中服務(wù)器 server

  • event_handler 模塊
    該模塊分為 11 個部分,分別具體處理客戶端發(fā)來的各個操作事件。如登錄加好友刪除好友等操作。
  • database 數(shù)據(jù)庫模塊
    該模塊主要是根據(jù)客戶端觸發(fā)的事件對數(shù)據(jù)庫的各種操作。
  • broadcast 廣播模塊
    該模塊主要是針對群聊,為群組中的每個在線用戶廣播發(fā)送消息。
  • memory 模塊
    定義用戶與 secure_channel 對象互相映射的字典列表,所有已經(jīng)建立的 secure_channel 對象,以及用戶下線后將其從在線 secure_channel 對象列表中移除的操作。
  • 客戶端服務(wù)器公用模塊 common

  • message 模塊
    將變量數(shù)據(jù)等變成可存儲或者傳輸?shù)倪^程即序列化,同時還將各個事件的類型變?yōu)槊杜e變量保存,將收到的數(shù)據(jù)包反序列化進行恢復,再提取數(shù)據(jù)包中 Message 的類型。
  • cryptography 模塊
    用于調(diào)用其生成公鑰,然后從證書中獲取公鑰,再使用 D-H 算法協(xié)商生成共享密鑰。
  • prime 模塊
    該模塊主要是判斷是否為素數(shù),生成大素數(shù),為證書的生成提供基礎(chǔ)。
  • secure_channel 模塊
    該模塊主要是定義 secure_channel 類,即包裹了 socket 和參數(shù)秘鑰的封裝對象。在通信對象之間協(xié)商好對稱加密秘鑰之后封裝在這個新的對象中。并且這個對象對數(shù)據(jù)有新的函數(shù)功能:
    • send 函數(shù)
      用于對發(fā)送的序列化之后的數(shù)據(jù)用對稱加密秘鑰進行 AES 加密并用 struct 結(jié)構(gòu)體將其打包成自設(shè)協(xié)議格式的數(shù)據(jù)包。
    • on_data
      函數(shù)主要用于接受數(shù)據(jù)的逆向解析。按照要求配置 socket 和數(shù)據(jù)傳輸?shù)母袷竭M行規(guī)則化。數(shù)據(jù)包的格式為前四個字節(jié)為消息體的長度,接著一字節(jié)存儲 AES 加密時的消息填充長度,然后 16 字節(jié) AES 加密時所需要的初始值,再接著是 32 字節(jié)的消息摘要,最后才是加密后的消息體。
  • 重要數(shù)據(jù)說明

  • 發(fā)送接收的數(shù)據(jù)格式

  • 接收數(shù)據(jù)時的三個字典

  • bytes_to_receive={}——用于存儲對應(yīng)用戶 id 或者服務(wù)器的將要接收的數(shù)據(jù);
  • bytes_received={}——用于標識已經(jīng)接收的數(shù)據(jù);
  • data_buffer={}——用于將已經(jīng)接收的數(shù)據(jù)解密,反序列化生成最初的數(shù)據(jù)字符串。
  • 全局都在引用的數(shù)據(jù)

  • sc_to_user_id={}——表示映射關(guān)系為 sc->user_id 的字典;
  • user_id_to_sc={}——表示映射關(guān)系為 user_id-> 的字典;
  • socket_to_sc={}——表示 socket 和已生成 sc 對象的映射關(guān)系字典;
  • scs=[]——存儲所有運行出來的 sc(secure_channel)對象;
  • chat_history=[]——用于暫時存儲聊天信息歷史。
  • 客戶端接收到的數(shù)據(jù) data

    data 是一部字典,它包括 key:parameters,type.parameters 也是一部字典,內(nèi)部包括 key:target_type,time,sender_id(發(fā)送者 id),target_id(接收方 id),sender_name(接收者姓名,message 字典(內(nèi)含數(shù)據(jù)內(nèi)容,字體,字體大小顏色)。而外層的這個 type 存儲的是交給 server 的 MessageType 類型,如果是不同的 MessageType 會進行不同的數(shù)據(jù)庫操作和客戶端操作。具體實例如下:

    data={'parameters':{ 'target_type':0, 'time':1562754761321, 'sender_id':1, 'target_id':2, 'sender_name':'1', 'message'{ 'data':'hello', 'fontsize':10, 'type':0, 'fontcolor':'#000000' } },'type':<MessageType.on_new_message:109> }

    例子中 data[‘parameters’][‘target_type’]=0 表示文本信息,從 id 為 1 的用戶發(fā)出信息,發(fā)給 id 標號為 2 的人,發(fā)送方昵稱為‘1’。給服務(wù)器發(fā)送的操作碼為 109。

  • 安全傳輸

  • 數(shù)據(jù)包結(jié)構(gòu)

  • 消息加密算法:AES 對稱加密算法,保證消息機密性

  • 消息摘要算法:MD5 算法,保證消息的完整性

  • 包結(jié)構(gòu)分析

  • 第一層(解密前)

    通過函數(shù) struct.pack()構(gòu)造加密的數(shù)據(jù)包,結(jié)構(gòu)如下

    相關(guān)代碼如下

    iv1=bytes(os.urandom(16))data_to_encrypt=serialize_message(message_type,parameters) length_of_message=len(data_to_encrypt) padding_n=math.ceil(length_of_message/16)*16-length_of_messageforiinrange(0,padding_n):data_to_encrypt+=b'\0'

    其中 iv1 是 16 字節(jié)隨機數(shù)作為初始向量。要加密的數(shù)據(jù)是序列化的初始數(shù)據(jù)。獲取長度后用\0 填充。然后將數(shù)據(jù)用 python 庫函數(shù) aes,cbc 模式加密得到加密數(shù)據(jù)。

  • 第二層(解密后)

    結(jié)構(gòu)如下

    • MessageType:event_handler_map()規(guī)定的操作碼

    • Parameter:字典參數(shù),包含 target_type(標志群聊或者私聊)等

  • 第三層,序列化數(shù)據(jù)的安排格式

  • 第四層,基礎(chǔ)數(shù)據(jù)部分

    包括 int、str、bool、float、binary 等

  • 密鑰分發(fā)

  • 協(xié)商過程

    客戶端的證書、公鑰、私鑰

  • 加密算法

    采用 DH 協(xié)商對稱加密的共享密鑰,具體過程如下

  • 程序函數(shù)清單

    客戶端函數(shù)

  • socket_listener(self,data)

    • 位置

      • client/forms/register_form.py
      • client/forms/login_form.py
      • client/forms/contacts_form.py
      • client/forms/chat_form.py
    • 參數(shù)

      • self:所在的類的自身
      • data:監(jiān)聽數(shù)據(jù)
    • 功能

      在注冊、登錄、好友列表、聊天框四個頁面建立事件監(jiān)聽,解析監(jiān)聽 data,確定數(shù)據(jù)中 MessageType 的類型,在 register_form.py 文件中用于判斷用戶名是否被占用、返回注冊結(jié)果;在 login_form.py 中用于返回登錄結(jié)果;在 contacts_form.py 文件中用于判斷是否處理添加、刪除好友、添加、創(chuàng)建群聊以及執(zhí)行操作的結(jié)果、判斷好友是否下線并刷新好友列表。

  • remove_socket_listener_and_close(self)

    • 位置

      • client/forms/register_form.py
      • client/forms/login_form.py
      • client/forms/contacts_form.py
      • client/forms/chat_form.py
    • 參數(shù)

      • self:所在的類的自身:RegisterForm、LoginForm、ContactsForm、ChatForm
    • 功能

      通過調(diào)用 util/socket_listener 文件下的 remove_listener 函數(shù)來關(guān)閉事件監(jiān)聽,同時調(diào)用庫函數(shù) destroy()關(guān)閉窗口、清空客戶端緩存信息。

  • _init_(self,master=None)

    • 位置

      • client/forms/register_form.py
    • 參數(shù)

      • self:所在類 RegisterForm 自身
      • master:注冊主窗口用來容納其他組件,默認一個窗口 master=None
    • 功能

      通過庫函數(shù) super()實現(xiàn)子類__init__()對父類__init__()的繼承;對注冊窗口進行布局,包括確定注冊界面的長寬,確定背景、標簽、輸入框、按鈕等的位置、顏色、類型、鏈接等;初始化安全信道;通過 socket_listener()函數(shù)和 remove_socket_listener_and_close()函數(shù)控制對客戶端 socket 事件監(jiān)聽和關(guān)閉。

  • do_register(self)

    • 位置

      • client/forms/register_form.py
    • 參數(shù)

      • self:所在類 RegisterForm 自身
    • 功能

      檢查輸入的用戶名、密碼、郵箱是否合法;判斷兩次輸入的密碼是否相同;調(diào)用 get_ip()函數(shù)獲取客戶端的 IP 地址和端口號;向服務(wù)器發(fā)送注冊請求,并通過調(diào)用函數(shù) send()將注冊輸入的用戶名、密碼、郵箱、性別、年齡以及用戶的 IP 地址和端口號等信息發(fā)送給服務(wù)器;構(gòu)造數(shù)字證書,命名為 IP 地址 +“——cert.pem”,內(nèi)容為用戶名 + 郵箱 + 用戶公鑰

  • ._init_(self,master=None)

    • 位置

      • client/forms/login_form.py
    • 參數(shù)

      • self:所在類 RegisterForm 自身
      • master:登錄主窗口用來容納其他組件,默認一個窗口 master=None
    • 功能

      通過庫函數(shù) super()實現(xiàn)子類__init__()對父類_init_()的繼承;對登錄窗口進行布局,包括確定注冊界面的長寬,確定背景、標簽、輸入框、按鈕等的位置、顏色、類型、鏈接等;初始化安全信道;通過 socket_listener()函數(shù)和 add_listener()函數(shù)將服務(wù)器端加入到監(jiān)聽列表中。

  • do_login(self)

    • 位置

      • client/forms/login_form.py
    • 參數(shù)

      • 參數(shù) self:所在類 LoginForm 自身
    • 功能

      檢查輸入的用戶名、密碼是否合法;通過調(diào)用函數(shù) send()向服務(wù)器發(fā)送登錄請求,并將輸入的用戶名、密碼等信息發(fā)送給服務(wù)器。

  • show_register(self)

    • 位置

      • client/forms/login_form.py
    • 參數(shù)

      • self:所在類 LoginForm 自身
    • 功能

      與注冊按鈕關(guān)聯(lián),通過點擊按鈕調(diào)用庫函數(shù) Toplevel()跳轉(zhuǎn)到注冊頁面。

  • ._init_(self,master=None)

    • 位置

      • client/forms/contacts_form.py
    • 參數(shù)

      • self:所在類 ContactsForm 自身
      • master:登錄主窗口用來容納其他組件,默認一個窗口 master=None。
    • 功能

      通過庫函數(shù) super()實現(xiàn)子類_init__()對父類__init_()的繼承;對好友列表窗口布局,確定好友列表的長寬、按鈕的位置、顏色、類型、鏈接等;調(diào)用 VerticalScrolledFrame()函數(shù),將列表設(shè)置滾動條 + 圖片背景;初始化安全信道;通過 socket_listener()函數(shù)和 remove_socket_listener_and_close()函數(shù)控制對客戶端 socket 事件監(jiān)聽和關(guān)閉。

  • refresh_contacts(self)

    • 位置

      • client/forms/contacts_form.py
    • 參數(shù)

      • self:所在類 ContactsForm 自身
    • 功能

      通過比較與好友或群聊最近一次發(fā)消息的時間 last_message_timestamp 和好友的在線情況刷新好友列表,根據(jù)好友或群聊發(fā)送消息的時間遠近對好友列表進行排列,并將在線好友移至列表頂部

  • on_add_friend(self)/on_del_friend(self)/on_add_room(self)on_create_room(self)

    • 位置

      • client/forms/contacts_form.py
    • 參數(shù)

      • self:所在類 ContactsForm 自身
    • 功能

      與添加好友、刪除好友、添加群聊、創(chuàng)建群聊四個按鈕鏈接;使用庫函數(shù) simpledialog.askstring()彈出輸入框,并對輸入的內(nèi)容進行檢驗;使用函數(shù) send()向服務(wù)器發(fā)送操作請求。

  • handle_new_contact(self,data)

    • 位置

      • client/forms/contacts_form.py
    • 參數(shù)

      • self:所在類 ContactsForm 自身
      • data:接收的數(shù)據(jù)
    • 功能

      被該文件下的另一個函數(shù)__init__()調(diào)用用來添加或刪除列表中的好友。

  • _init_(self,target,master=None)

    • 位置

      • client/forms/chat_form.py
    • 參數(shù)

      • self:所在類 ChatFrame 自身
      • target:一個用來暫時存儲消息的列表
      • master:聊天框主窗口用來容納其他組件,默認一個窗口 master=None
    • 功能

      對聊天框布局,確定聊天框的長寬、輸入框、消息框、按鈕的位置、顏色、類型、鏈接等;分辨私人聊天和群聊;利用 append_to_chat_box()函數(shù)加載、更新歷史消息。

  • send_message(self)/send_file(self)

    • 位置

      • client/forms/chat_form.py
    • 參數(shù)

      • self:所在類 ChatFrame 自身
    • 功能

      通過調(diào)用 input_textbox.get()函數(shù)和 filedialog.askopenfilename()函數(shù)實現(xiàn)發(fā)送消息和文件。

  • digest_message(self,data)

    • 位置

      • client/forms/chat_form.py
    • 參數(shù)

      • self:所在類 ChatFrame 自身
      • data:傳輸?shù)臄?shù)據(jù)
    • 功能

      通過分析傳輸?shù)臄?shù)據(jù)包,摘取消息的時間戳、發(fā)送者、消息類型,為布局做準備。

  • _init_(self,parent,onclick)

    • 位置

      • client/components/contact_item.py
    • 參數(shù)

      • self:所在類 ContactItem 自身
      • parent:向函數(shù)內(nèi)定義的子類傳遞的參數(shù)
      • onclick:跳轉(zhuǎn)動作
    • 功能

      位于 ContactItem 類中,對好友列表中的每一行進行布局如

  • _init_(self,parent,*args,**kw)

    • 位置

      • client/components/vertical_scrolled_frame.py
    • 參數(shù)

      • self:所在類 VerticalScrolledFrame 自身
      • parent:向函數(shù)內(nèi)定義的子類傳遞的參數(shù)
      • *args:可變參數(shù)
      • **kw:關(guān)鍵字參數(shù)
    • 功能

      利用 Scrollbar()函數(shù)創(chuàng)建一個帶有滾動條的畫布,并可以通過滾動條對畫布及時更新。

  • common 函數(shù)

  • gen_secret()

    • 位置

      • common\cryptography\crypt.py
    • 功能

      產(chǎn)生用戶的公鑰私鑰

    • 算法描述

      利用 prime.generate_big_prime()函數(shù)產(chǎn)生一個大的素數(shù)作為私鑰,然后利用相應(yīng)算法計算出自己的公鑰,將公鑰和私鑰保存成文件,公鑰可寫入證書,私鑰單獨保存不傳輸

  • _serialize_xxx(xxx)

    • 位置

      • common\message_init_.py
    • 參數(shù):要序列化的數(shù)據(jù)類型

    • 功能

      針對傳入的不同數(shù)據(jù)類型進行序列化算法描述:對不同數(shù)據(jù)類型進行序列化成二進制然后返回統(tǒng)一格式的數(shù)據(jù),方便進行數(shù)據(jù)的傳輸和存好友的用戶名和在線狀態(tài)最近一次消息時間好友的 IP 地址和端口號消息內(nèi)容未讀消息計數(shù)儲。每個序列化后的數(shù)據(jù)格式為:|——VAR_TYPE(1Byte)——|——DATA_LEN(4Bytes)——|——DATA——|。即 1 字節(jié)數(shù)據(jù)類型,4 字節(jié)數(shù)據(jù)長度和數(shù)據(jù)部分。

      主要用_serialize_list(list):_serialize_list(list)數(shù)據(jù)打包格式如下:|——1ByteTypeofparams——|——4BytesLengthofbody——|——Body(self-evidentlength)——|——Body(selfevidentlength)——|——Body(self-evidentlength)——|…即第一字節(jié)為列表類型,然后 4 字節(jié)的數(shù)據(jù)長度,由每種數(shù)據(jù)類型占用長度不同分配不同的 BODY 長度,每一個 BODY 可以是如 list,int,float 等數(shù)據(jù)類型。

  • _deserialize_xxx(bytes)

    • 位置

      • common\message_init_.py
    • 參數(shù):二進制數(shù)據(jù)

    • 功能

      針對傳入的不同數(shù)據(jù)類型數(shù)據(jù)進行反序列化成原本數(shù)據(jù)

    • 算法描述

      對二進制進行反序列成指定的數(shù)據(jù)類型,即是_serialize_xxx 的逆過程,可用于解析數(shù)據(jù)包。

  • send(self,message_type,parameters=None)

    • 位置

      • common\transmission\secure_channel.py
    • 參數(shù)

      • self 即為 SecureChannel 類
      • message_type 即為消息的類型
    • 功能

      按照自制的協(xié)議組織數(shù)據(jù)包發(fā)送數(shù)據(jù)包

    • 算法描述

      數(shù)據(jù)包的格式為前四個字節(jié)為消息體的長度,接著一字節(jié)存儲 AES 加密時的消息填充長度,然后 16 字節(jié) AES 加密時所需要的初始值,再接著是 32 字節(jié)的消息摘要,最后才是加密后的消息體。

  • on_data(self,data_array)

    • 位置

      • common\transmission\secure_channel.py
    • 參數(shù)

      • self 即為 SecureChannel 類
      • data_array 即為字節(jié)數(shù)組
    • 功能

      解析數(shù)據(jù)包,并利用 mac 驗證消息的完整性

    • 算法描述

      首先把 bytes([padding_n])+iv1+encrypted_message 傳給本函數(shù),然后得到消息體,和消息摘要,接收方對消息利用相同的算法計算其消息摘要,驗證消息是否被篡改最后對消息解密,返回解密后的反序列化后的原始數(shù)據(jù)。

  • establish_secure_channel_to_server()

    • 位置

      • common\transmission\secure_channel.py
    • 功能

      與集中服務(wù)器建立安全信道

    • 算法描述

      客戶端首先獲取本機的 ip 地址,生成自己的私鑰公鑰和證書,首次連接的時候要給服務(wù)器發(fā)送證書,計算出二者的共同密鑰。

  • accept_client_to_secure_channel(socket)

    • 位置

      • common\transmission\secure_channel.py
    • 參數(shù)

      • socket:客戶端和服務(wù)器通信的 socket
    • 功能

      服務(wù)器接收客戶端建立安全信道

    • 算法描述

      首次連接,客戶端會發(fā)送公鑰,把服務(wù)器的證書發(fā)送給客戶端,二者計算出共同密鑰。

  • gen_last_message(obj)

    • 位置

      • common\utli\socket_listener\__init__.py
    • 參數(shù)

      • obj 為傳輸數(shù)據(jù) data 的 obj 類型
    • 功能

      獲取對象中 message 的類型,0 表示文字信息,1 表示圖片信息

    • 算法描述

      obj[‘message’][‘type’]判斷 0 與 1.type0-文字消息 1-圖片消息。

  • socket_listener_thread(sc,tk_root)

    • 位置

      • common\socket_listener__init.py
    • 參數(shù)

      • sc 是已經(jīng)建立的 C-S 安全 socket,socket_channel,帶有對稱秘鑰
      • tk_root 是 tkinter 界面對象。
    • 功能

      循環(huán)接收信息,進入 socket 監(jiān)聽狀態(tài),當接受到信息后完整的接收數(shù)據(jù)包并從中獲取操作碼,根據(jù)操作碼的不同進行不同的處理。

    • 算法描述

      使用 select.select 函數(shù)阻塞運行,當有處理時不會被其他人占用。其中接受數(shù)據(jù)有三個變量:

      • bytes_to_receive=0
      • bytes_received=0
      • data_buffer=bytes()

      當 bytes_to_receive=0、bytes_received=0 時表示正準備接受一個新的 socket 數(shù)據(jù)。開始接收后會通過數(shù)據(jù)包前四個字節(jié)判斷長度。如果長度小于四字節(jié)說明是損壞的包或者是空包,沒有數(shù)據(jù),表示服務(wù)器已關(guān)閉。通過指針[0]+1+16 使指針指向數(shù)據(jù)部分。+1 是 aes 的填充部分 1 字節(jié),+16 是 aes 初始向量 4 字節(jié)。直到接收完畢為止。接受完會把數(shù)據(jù)包解包取出數(shù)據(jù)部分,并不斷拼接形成完整數(shù)據(jù)字符串。

  • digest_message(data,update_unread_count=True)

    • 位置

      • common\socket_listene\__init__.py
    • 參數(shù)

      • data 是要放入的歷史數(shù)據(jù)
      • update_unread_count 初始參數(shù)設(shè)置為 True 使消息未讀數(shù)自增
    • 功能

      實現(xiàn)將歷史數(shù)據(jù)放入 chat_history 列表中,更新最新消息,消息時間,消息未讀數(shù)量,并更新用戶的好友列表,在前端進行刷新,更新聊天窗口。

    • 算法描述

      通過 if 像 chat_history 中的數(shù)據(jù)填入以前的數(shù)據(jù)。將 data 更新用于發(fā)送。

  • add_listener(func)

    • 位置

      • common\socket_listener\__init__.py
    • 參數(shù)

      • func 是一個函數(shù)
    • 功能

      將某一函數(shù)事件放入執(zhí)行列表中,之后會被逐個調(diào)用

    • 算法描述

      將 func 函數(shù) append 到 callback_funcs 待執(zhí)行函數(shù)列表中。

  • remove_listener(func)

    • 位置

      • common\socket_listener__init__.py
    • 參數(shù)

      • func 是一個函數(shù)
    • 功能

      將某一函數(shù)事件從執(zhí)行列表中移除

    • 算法描述

      列表的 remove 操作

  • 服務(wù)器端函數(shù)

  • handler_event

    • 位置

      • server\event_handler_init_.py
    • 參數(shù)

      • sc:即為相應(yīng)的 socket;
      • event_type:即為事件的類型;
      • parameters:相應(yīng)事件中包含的參數(shù)。
    • 功能

      將不同類型的 event 映射到相應(yīng)的事件處理操作上,比如將 MessageType.login 映射到執(zhí)行 login 的處理操作上。

    • 算法描述

      主要是利用 map 根據(jù)提供的函數(shù)對指定事件做映射。

  • run

    • 位置

      • server\event_handler\login.py
    • 參數(shù)

      • sc:相應(yīng)的 socket
      • parameters:從客戶端傳入的相關(guān)參數(shù)
    • 功能

      客戶端點擊登錄按鈕后,集中服務(wù)器進行用戶登錄后的相關(guān)操作。

    • 算法描述

      首先從傳入的參數(shù)中得到用戶的 username 和對應(yīng)的 password,繼而得到對數(shù)據(jù)庫的控制操作權(quán)限,查詢該用戶是否存在,用戶名和密碼是否匹配。若返回值為 0,則為客戶端發(fā)送 MessageType.login_failed。下一步查看該用戶是否已經(jīng)登入,若已登入則踢下線,否則登錄成功,向客戶端發(fā)送 MessageType.login_successful。登錄成功后向客戶端發(fā)送好友列表,通知他的好友他已上線,最后從數(shù)據(jù)庫中讀出他的聊天記錄,將其和好友列表一起作為 login_bundle 的參數(shù)發(fā)送給客戶端。

  • run

    • 位置

      • server\event_handler\register.py
    • 參數(shù)

      • sc:相應(yīng)的 socket;
      • parameters:從客戶端傳入的相關(guān)參數(shù)
    • 功能

      客戶端點擊注冊按鈕后,集中服務(wù)器進行用戶注冊后的相關(guān)操作

    • 算法描述

      首先從傳入的參數(shù)中獲取用戶名,繼而得到對數(shù)據(jù)庫的控制操作權(quán)限,查詢該用戶名是否已被注冊,若被注冊則向客戶端發(fā)送 MessageType.username_taken,否則的話傳入的參數(shù)中獲取用戶的 ip,重寫用戶生成的證書,然后再把用戶的信息插入到數(shù)據(jù)庫中。

  • run

    • 位置

      • server\event_handler\add_friend.py
    • 參數(shù)

      • sc:相應(yīng)的 socket;
      • parameters:從客戶端傳入的相關(guān)參數(shù)
    • 功能

      客戶端點擊添加好友輸入好友用戶名后,集中服務(wù)器進行用戶添加好友后的相關(guān)操作

    • 算法描述

      首先從傳入的參數(shù)中得到用戶的 username,繼而得到對數(shù)據(jù)庫的控制操作權(quán)限,查詢該用戶是否存在,若不存在向客戶端發(fā)送 MessageType.add_friend_result,并提示用戶“用戶名不存在”,否則根據(jù)用戶名找到用戶 id,判斷其是否為自己的 id,則提示用戶”不能加自己為好友“。再下一步查詢用戶自己的 id 和好友 id 是否已在 friends 表中,若存在,則提示用戶“已經(jīng)是好友/已經(jīng)發(fā)送過好友請求”,否則的話將用戶自己的 id 和好友 id 插入到 friends 表中,但是 accpted 的值為 0,因為此時還不清楚對方是否同意添加你為好友。然后向用戶發(fā)送 MessageType.add_friend_result,值為 true。最后若對方在線,則向其發(fā)送 MessageType.incoming_friend_request,讓對方處理添加好友的請求。

  • run

    • 位置

      • server\event_handler\resolve_friend_request.py
    • 參數(shù)

      • sc:相應(yīng)的 socket;
      • parameters:從客戶端傳入的相關(guān)參數(shù)
    • 功能

      當有用戶向目標用戶發(fā)送好友添加請求時,服務(wù)器處理好友請求操作

    • 算法描述

      首先從傳入的參數(shù)中得到 uid,繼而得到對數(shù)據(jù)庫的控制操作權(quán)限,查詢 friends 表中好友關(guān)系(accepted 狀態(tài)為 0)是否在數(shù)據(jù)庫中已存在,若不存在也不進行相關(guān)操作。若拒絕添加好友,則將數(shù)據(jù)庫中的該條數(shù)據(jù)刪除,若同意加為好友,則更新 friends 表 accepted 為 1,并且在數(shù)據(jù)庫中添加雙向關(guān)系。并給客戶端發(fā)送 MessageType.contact_info,在好友列表中顯示添加成功的好友。若對方在線,也發(fā)送 MessageType.contact_info,在好友列表中顯示添加成功的新好友。

  • run

    • 位置

      • server\event_handler\del_friend.py
    • 參數(shù)

      • sc:相應(yīng)的 socket;
      • parameters:從客戶端傳入的相關(guān)參數(shù)
    • 功能

      客戶端點擊刪除好友,輸入好友用戶名后,集中服務(wù)器進行用戶刪除好友后的相關(guān)操作。

    • 算法描述

      首先從傳入的參數(shù)中得到用戶的 username,繼而得到對數(shù)據(jù)庫的控制操作權(quán)限,查詢該用戶是否存在,若不存在向客戶端發(fā)送 MessageType.add_friend_result,并提示用戶“用戶名不存在”,否則根據(jù)用戶名找到用戶 id,判斷其是否為自己的 id,則提示用戶”不能刪除自己“。再下一步判斷對方是否是自己的好友,查詢用戶自己的 id 和好友 id 是否已在 friends 表中,若不存在,則提示用戶“該用戶還不是您的好友”,若對方是自己的好友,則在 friends 表中刪除二者的好友關(guān)系,并向客戶端發(fā)送 MessageType.del_info,使刪除的好友在好友列表中消失。若對方在線,也發(fā)送 MessageType.del_info,使自己在對方好友列表中也消失,實現(xiàn)雙向的刪好友功能。

  • run

    • 位置

      • server\event_handler\create_room.py
    • 參數(shù)

      • sc:相應(yīng)的 socket;
      • parameters:從客戶端傳入的相關(guān)參數(shù)
    • 功能

      客戶端點擊創(chuàng)建群組聊天,輸入群組名后,集中服務(wù)器進行創(chuàng)建群組的相關(guān)操作。

    • 算法描述

      首先獲取 user_id,然后將該群聊加入數(shù)據(jù)庫 rooms 中,并且向客戶端發(fā)送 MessageType.contact_info,使用戶在好友列表中顯示群聊。最后向客戶端發(fā)送 MessageType.general_msg,提示用戶創(chuàng)建群聊成功,并顯示群號。

  • run

    • 位置

      • server\event_handler\join_room.py
    • 參數(shù)

      • sc:相應(yīng)的 socket;
      • parameters:從客戶端傳入的相關(guān)參數(shù)
    • 功能

      客戶端點擊添加群組聊天,輸入群組名后,集中服務(wù)器進行添加群聊的相關(guān)操作。

    • 算法描述

      首先獲取 user_id,調(diào)用數(shù)據(jù)庫的 in_room 函數(shù)判斷用戶是否已在群中,若已在則提示用戶“已在群里了“,調(diào)用數(shù)據(jù)庫的 get_room 函數(shù)判斷群聊是否存在,若不存在提示用戶”群不存在“,否則調(diào)用 add_to_room 將用戶加入到群聊中,并向客戶端發(fā)送 MessageType.contact_info,使用戶在好友列表中顯示該群聊。

  • get_user(user_id)

    • 位置

      • server\util\database\__init__.py
    • 參數(shù)

      • int 型,表示該用戶的用戶 id
    • 功能

      獲取數(shù)據(jù)庫中 users 表中 id 值為 user_id 的那一行的所有數(shù)據(jù)。

    • 算法描述

      執(zhí)行數(shù)據(jù)庫查詢語句返回一行結(jié)果。若無結(jié)果返回空。

  • get_pending_friend_request(user_id)

    • 位置

      • server\util\database\__init__.py
    • 參數(shù)

      • user_Id,int 類型,表示某一個用戶的 id 值。
    • 功能

      返回一個列表,列表中的內(nèi)容為加 user_id 的用戶的好友們的個人信息。

    • 算法描述

      從數(shù)據(jù)庫中查詢 friends 表,to_user_id 為 user_id 的行中且為 accepted=1 的獲取 from_user,用 get_user 函數(shù)查詢他們的信息并 append 到列表中。

  • get_friends(user_id)

    • 位置

      • server\util\database\__init__.py
    • 參數(shù)

      • user_Id,int 類型,表示某一個用戶的 id 值。
    • 功能

      類似 get_pending_friend_request(user_id)函數(shù),只是會返回‘我’加誰為好友且 accept 的用戶信息。

    • 算法描述

      從數(shù)據(jù)庫中查詢 friends 表,from_user_id 為 user_id 的行中且為 accepted=1 的獲取 to_user,用 get_user 函數(shù)查詢他們的信息并 append 到列表中。

  • get_room(room_id)

    • 位置

      • server\util\database\__init__.py
    • 參數(shù)

      • room_id,int 類型,表示一個 room 的 id 值
    • 功能

      返回群聊 id 為 room_id 的群聊房間在 rooms 表中的所有信息的字典,包括 id,名字

    • 算法描述

      從數(shù)據(jù)庫中查詢 room 表,返回對應(yīng) room_id 的 room 的全部信息,壓縮為字典并返回。

  • get_user_rooms(user_id)

    • 位置

      • server\util\database\__init__.py
    • 參數(shù)

      • user_Id,int 類型,表示某一個用戶的 id 值。
    • 功能

      返回一個字典,列表中內(nèi)容為 user_id 用戶加入的群聊的 room 的全部信息。

    • 算法描述

      從數(shù)據(jù)庫中查詢 room_user 表,返回對應(yīng) user_id 的 room 的全部信息值,變成字典中并返回。

  • get_user_rooms_id(user_id)

    • 位置

      • server\util\database\__init__.py
    • 參數(shù)

      • user_Id,int 類型,表示某一個用戶的 id 值。
    • 功能

      返回一個列表,列表中內(nèi)容為 user_id 用戶加入的群聊的 room_id。

    • 算法描述

      從數(shù)據(jù)庫中查詢 room_user 表,返回對應(yīng) user_id 的 room_id 的全部信息值,append 入列表中并返回。

  • is_friend_with(from_user_id,to_user_id)

    • 位置

      • server\util\database\__init__.py
    • 參數(shù)

      • from_user_id 為好友發(fā)起請求方
      • to_user_id 為接收好友請求方
    • 功能

      返回一個判斷值 1 或者 0.判斷兩者是否為朋友。

    • 算法描述

      從 friends 表中查詢有無兩者建立關(guān)系的一行,若沒有,則返回 0 表示不是好友。

  • in_room(user_id,room_id)

    • 位置

      • server\util\database\__init__.py
    • 參數(shù)

      • user_id 為待檢查用戶
      • room_id 為待檢查群聊號
    • 功能

      判斷 user_id 用戶是否在 room_id 的群聊中。

    • 算法描述

      從 room_user 表中查詢有無兩者建立關(guān)系的一行,若沒有,則返回 0 表示不是不在群聊中。

  • add_to_room(user_id,room_id)

    • 位置

      • server\util\database\__init__.py
    • 參數(shù)

      • user_id 為待檢查用戶
      • room_id 為待檢查群聊號
    • 功能

      將用戶 id 為 user_id 的用戶加入到 room_id 的群聊中。

    • 算法描述

      數(shù)據(jù)庫 insert 將 user_id 插入到 room_id 的 room_user 表中。

  • get_room_members_id(room_id)

    • 位置

      • server\util\database\__init__.py
    • 參數(shù)

      • room_id 為待檢查群聊號
    • 功能

      獲取群聊中的所有用戶 id。

    • 算法描述

      select 逐一查詢,將結(jié)果返回入列表。

  • add_to_chat_history(user_id,target_id,target_type,data,sent)

    • 位置

      • server\util\database\__init__.py
    • 參數(shù)

      • user_Id 是發(fā)送者 id
      • target_id 是目標用戶 id
      • target_type 是數(shù)據(jù)類型,0 表示文本信息,1 表示圖像文件信息
      • data 是傳輸存儲的數(shù)據(jù)
      • sent 標志位記錄是否發(fā)送成功。若為 0,下一次還會再發(fā)送。
    • 功能

      將聊天信息加入到正確用戶的數(shù)據(jù)庫中。

    • 算法描述

      將相關(guān)信息 insert 入表 chat_history 中。

  • get_chat_history(user_id)

    • 位置

      • server\util\database\__init__.py
    • 參數(shù)

      • user_id 為待檢查用戶
    • 功能

      獲取 user_id 用戶的聊天記錄。

    • 算法描述

      select 查詢并更新 sent 標志位。

  • 實現(xiàn)效果

  • 注冊頁面

    對輸入的用戶名、密碼、郵箱、確認密碼等進行檢查,用戶名和密碼限制輸入非法字符,郵箱限制輸入為 xxx@xxx.xxxmailto:xxx@xxx.xxx 形式,同時限制輸入的用戶名長度不大于 8 個,允許中文輸入。

  • 登錄頁面

    對輸入的用戶名和密碼進行檢查,限制輸入非法字符,同 時限制輸入的用戶名長度不大于 8 個,允許中文輸入。

  • 好友列表

    好友列表會顯示所有好友的在線狀態(tài)、IP 地址、端口號、最新消息和未讀消息, 好友列表根據(jù)用戶離線、在線情況對列表進行刷新,將在線和最近聊天用戶置頂。

  • 添加好友

  • 添加好友時需要輸入用戶名,同時會對輸入的信息進行合法性檢查,不能添加自 己為好友。

  • 要添加的好友用戶名必須為已經(jīng)注冊的用戶,否則會顯示用戶名不存在。

  • 輸入正確用戶名并點擊 OK 后,會顯示好友請求已發(fā)送。

  • 如果在線,會顯示好友請求,點擊 YSE 后,會在雙方的好友列表中添加;點擊 NO 后兩個用戶無法成為好友;點擊 cancle 后,下次登陸時會再次彈出好友請求框。

  • 刪除好友

  • 與添加好友相同,需要輸入用戶名,同時會對輸入的信息進行合法性檢查,不能刪 除自己。

  • 不能刪除好友列表中不存在的用戶。

  • 輸入正確用戶名并點擊 OK 后,會顯示成功刪除好友,并且好友列表進行刷新刪除 剛剛刪除的好友信息,刪除用戶也會對好友列表進行刷新,即雙方向刪除。

  • 添加群聊

    需要輸入要添加的群聊的群號,同時會對輸入的信息進行合法性檢查,如果群號 不存在則無法添加,同樣如果已經(jīng)在群聊中,會顯示已經(jīng)在群聊中。

  • 創(chuàng)建群聊

    需要輸入創(chuàng)建的群聊的群名稱,同時會對輸入的信息進行合法性檢查,如果群名 稱已存在,則無法創(chuàng)建,創(chuàng)建成功后會分配一個群號。

  • 群聊界面

  • 在群聊界面中,用戶可以直接發(fā)送消息,也可以點擊發(fā)送文件按鈕發(fā)送文件,聊天 框會顯示用戶名、發(fā)送時間和消息內(nèi)容,不同用戶名顏色不同,歷史消息會進行緩 存,用戶再次打開聊天框時會直接顯示。

  • 用戶可以根據(jù)自己的習慣更改字體大小。

  • 用戶可以根據(jù)自己的習慣更改字體顏色。

  • 用戶聊天界面

    和群聊界面基本相同,用戶聊天內(nèi)容會緩存到客戶端文件夾中,發(fā)送的文件會存 儲到專用文件夾中,如下圖。

  • 待優(yōu)化

    正常信息交互流程,server 端會返回加密數(shù)據(jù),此時 client 會一直等待接收 (while true)。如果發(fā)的太大,server 端加密不出來,client 一直監(jiān)聽,導致 client 無法再次發(fā)起操作。

    以正常的發(fā)送圖片數(shù)據(jù)抓包為例子,server 會不斷接收,然后做加密。

    總結(jié)

    以上是生活随笔為你收集整理的基于python的安全即时通讯系统的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

    99精品视频网| 日韩精品黄| 天天色视频 | 欧美精品久久久久久久久老牛影院 | 一区二区视 | 亚洲精品国产综合99久久夜夜嗨 | 国产三级av在线 | 免费能看的av | 国产精品99爱| 国产高清在线免费观看 | 99热在线看 | 奇米网网址 | 黄色的视频网站 | 国产在线va| 欧美动漫一区二区三区 | 国产一区精品在线 | 成年人免费看片 | 极品中文字幕 | 成人av在线网 | 亚洲午夜av | 色综合中文综合网 | 亚洲少妇激情 | 日韩激情视频 | 狠狠色丁香婷综合久久 | 欧美极品在线播放 | 亚洲国产视频网站 | 日本三级大片 | 国产精品久久久久免费 | 天天射综合 | 免费av片在线 | 午夜久久久久久久久 | 成人免费观看网址 | 在线欧美a| 免费日韩视 | 亚洲精品乱码久久久久久高潮 | 亚洲在线视频免费 | 激情丁香综合五月 | www婷婷| 91人人网 | 成年人免费在线观看 | 国产精品都在这里 | 91九色精品女同系列 | 久久免费毛片视频 | 欧美成人性网 | 天天干com| 天堂av在线网 | 免费看国产精品 | av中文字幕在线播放 | 五月激情丁香婷婷 | 亚州国产视频 | 99在线观看精品 | 国产美女在线免费观看 | 怡春院av | 久草在线免费色站 | 97综合网| 天天干天天干天天操 | 中文字幕精品一区二区精品 | 五月天欧美精品 | 国产不卡一区二区视频 | 激情视频一区二区三区 | 在线免费观看av网站 | 天天干天天射天天爽 | 久久高清免费视频 | 国产色视频123区 | 国产综合在线视频 | 97香蕉超级碰碰久久免费软件 | 黄色综合| 日韩手机在线观看 | av免费观看在线 | 国内精品在线一区 | 国产成人一级电影 | 丁香5月婷婷久久 | 色网站中文字幕 | www色片| 国产一区在线免费 | 精品国内自产拍在线观看视频 | 中文字幕免费观看全部电影 | 国产精品久久久久永久免费 | 97免费在线观看视频 | 久久久久国产精品免费免费搜索 | 九七人人干 | 欧美日韩国产高清视频 | 国产精品18毛片一区二区 | 亚洲精品久久激情国产片 | 久久这里只有精品9 | 国产免费小视频 | 人人爱在线视频 | 天天干,天天射,天天操,天天摸 | 午夜国产福利在线观看 | 91av视频| 亚洲精品大全 | 国产精品18久久久久久久久久久久 | 国产高清日韩欧美 | 国产精品 中文字幕 亚洲 欧美 | 国产精品v欧美精品 | 久久影视网 | 99热这里只有精品在线观看 | av不卡网站 | 一级一片免费看 | 欧美精品一二三 | 久久久久9999亚洲精品 | 午夜久久福利影院 | 精品国产亚洲日本 | 日韩精品一区二区三区第95 | 久久夜色精品国产欧美乱 | www最近高清中文国语在线观看 | 久久久久久久久毛片 | 在线免费高清一区二区三区 | 人人dvd | 91一区啪爱嗯打偷拍欧美 | 在线 国产 日韩 | 久久伊人热 | 国产精选在线 | 激情影音 | 日韩影视精品 | 97理论片| 2020天天干夜夜爽 | 99久久综合国产精品二区 | 国产一区二区三区网站 | 国产精品福利av | 激情深爱| 国产一级免费av | 精品福利网站 | 成人免费网站在线观看 | 日韩精品中文字幕在线播放 | 亚洲a免费 | 国产精品一区二区在线看 | 国产精品粉嫩 | 狠狠色丁香久久婷婷综合_中 | 西西444www大胆高清视频 | 免费久久99精品国产婷婷六月 | 亚洲精品字幕 | 91精彩在线视频 | 曰韩精品 | 伊人狠狠干 | 91综合久久一区二区 | 中文国产成人精品久久一 | 国产日韩精品欧美 | 久草视频在线免费 | 99久久精 | 99久久久成人国产精品 | 香蕉视频啪啪 | 91福利视频免费观看 | 中文字幕888 | 97视频人人免费看 | 国产精品中文 | 99精品免费久久久久久久久日本 | 97国产在线播放 | 国产精品色视频 | 精品国产乱码久久久久久天美 | 久久久国产影视 | 91精品国产自产在线观看 | 国产婷婷一区二区 | 国产精品尤物 | 日本性生活免费看 | 久久久久这里只有精品 | 成人av高清在线 | av在线在线 | 国产一区二区三区久久久 | 在线黄色观看 | 在线视频日韩欧美 | 天天插天天 | 久久精品视频一 | 国产精品免费一区二区三区在线观看 | 久久精品99国产 | 国产精品99蜜臀久久不卡二区 | 久久国内视频 | 色综合激情网 | 伊人成人久久 | av一级片在线观看 | 麻豆视频免费在线观看 | 国产色女 | 国产免费久久av | 在线播放日韩av | 亚洲最新视频在线播放 | 成人久久亚洲 | 911久久 | 久久精品99久久久久久2456 | 精品久久久久久久久久久久久久久久 | 日韩精品免费一区二区在线观看 | 91九色视频在线播放 | 久久免费成人 | 操操日日 | 91入口在线观看 | 亚洲午夜久久久久久久久 | 成人精品一区二区三区电影免费 | 欧美成年人在线观看 | 日日夜夜av | 国产91成人在在线播放 | 97精品超碰一区二区三区 | 911亚洲精品第一 | 正在播放国产精品 | 亚洲在线 | 97色综合| 成人国产精品 | 久久精品影片 | 黄a网 | 久久国产美女 | 一级黄色片在线免费看 | 中文字幕av影院 | 在线观看成人av | 人人爽人人乐 | 日韩在线播放视频 | 超碰97在线资源 | 国产96在线观看 | 亚洲综合涩 | 黄污在线观看 | 日韩亚洲欧美中文字幕 | 久久观看免费视频 | 久久久麻豆视频 | 国产成人一区二区啪在线观看 | 五月天伊人网 | 黄色www免费 | 国产最新在线视频 | 欧美一级黄色视屏 | 91精品毛片| 不卡的av在线播放 | 精品视频在线看 | 亚洲一区二区三区91 | 国色天香第二季 | 国产精品一区二区三区视频免费 | 久久精品成人热国产成 | 色综合久久久久 | 久久精品爱爱视频 | 日本久久91 | 免费看黄电影 | 一区在线观看 | 亚洲成av人片在线观看www | 一二三久久久 | 国产精品麻豆99久久久久久 | 国精产品满18岁在线 | 天天操天天操天天操天天操天天操天天操 | 麻豆精品视频在线观看免费 | 99草在线视频 | 国产日韩欧美网站 | www,黄视频| 婷婷黄色片 | 国产啊v在线观看 | 国产理论一区二区三区 | 九九在线免费视频 | 人人揉人人揉人人揉人人揉97 | 欧美性色黄大片在线观看 | 久久精国产 | av大片免费看 | 欧美日韩午夜 | 天天干天天怕 | 69精品在线 | 国产午夜一区 | 男女拍拍免费视频 | 久久久久五月天 | 国产成人av在线影院 | 日韩免费一区二区在线观看 | 中文字幕在线看视频国产中文版 | 国产一区二区午夜 | 中文视频一区二区 | 香蕉视频在线网站 | 国产成人精品一区二区三区网站观看 | 亚洲欧美国内爽妇网 | 中文字幕在线播放日韩 | 欧美日韩免费在线视频 | 在线成人一区 | 国产精品每日更新 | 精品久久一 | 四虎在线免费观看 | 日韩成人一级大片 | 在线观看av麻豆 | 中文在线字幕观看电影 | 久久久久免费精品视频 | 手机在线小视频 | 国产中文欧美日韩在线 | 免费视频在线观看网站 | 免费av在线| 四虎影视成人永久免费观看视频 | 中文字幕一区二区三区久久蜜桃 | 草久久精品 | 久久久久福利视频 | 一区二区精品在线 | 午夜黄色影院 | 欧美另类交人妖 | 精品欧美在线视频 | 国产精品福利一区 | 爱色av.com | 深爱开心激情 | 91久久国产综合精品女同国语 | 美女视频黄免费网站 | av电影在线不卡 | 手机av在线免费观看 | 狠狠色丁香久久婷婷综合丁香 | 免费福利片2019潦草影视午夜 | 在线日韩中文字幕 | 99久久99久久精品免费 | 97电影在线看视频 | 黄网av在线 | 丁香婷五月 | 性日韩欧美在线视频 | 国产极品尤物在线 | 国产福利在线免费观看 | 欧美国产精品一区二区 | 亚洲视频在线观看免费 | 久热色超碰 | 在线观看你懂的网址 | 欧美a√大片 | 97精品久久人人爽人人爽 | 懂色av一区二区三区蜜臀 | 国产在线高清视频 | 国产精品成人久久久久 | 亚洲午夜精品久久久久久久久 | 成人九九视频 | 久久久人人爽 | 久久中文精品视频 | 很黄很色很污的网站 | 中文av影院| 成人9ⅰ免费影视网站 | 免费观看性生交大片3 | 国产91精品看黄网站在线观看动漫 | 国产精品国产三级国产不产一地 | 探花在线观看 | 免费久久久 | 免费看三片 | 日本久久久亚洲精品 | 日韩精品久久一区二区 | 国产一区二区三区免费在线观看 | 亚洲国内精品在线 | 色综合天天综合 | 新版资源中文在线观看 | 国产原创91 | 一本之道乱码区 | 国产资源在线播放 | 99免费在线观看视频 | 亚洲综合欧美激情 | 99久久9| 狠狠的干狠狠的操 | 国产精品6 | 五月婷婷毛片 | 日韩xxxxxxxxx | 亚洲国产精品va在线 | 日b视频在线观看网址 | 中文字幕 婷婷 | 免费av看片| 91片黄在线观 | 夜夜躁狠狠躁日日躁视频黑人 | 97超碰福利久久精品 | 成人免费亚洲 | 日韩免费观看视频 | 亚洲国产精品成人女人久久 | 欧美在线视频一区二区 | 久久6精品 | www.久久久久| 韩国精品福利一区二区三区 | 久久精品亚洲精品国产欧美 | 在线成人欧美 | 欧美日韩成人 | 久久国产福利 | 日韩视频一二三区 | 欧美一级特黄aaaaaa大片在线观看 | 国产原厂视频在线观看 | 婷婷在线观看视频 | 欧美精品久久久久久久久久丰满 | 国产一级免费av | 在线观看免费黄色 | 伊人久久国产 | 国产成人a亚洲精品 | 成年人在线免费看片 | 国产精品久久久久永久免费观看 | 精品久久久久久综合 | 久久国精品 | 国产精品ssss在线亚洲 | 涩涩色亚洲一区 | 免费高清国产 | 日韩欧美有码在线 | 最近免费中文字幕大全高清10 | 成人在线你懂得 | 国产91小视频 | 日韩高清片 | 国产精品久久久久久久久久东京 | 国产女做a爱免费视频 | 99视频偷窥在线精品国自产拍 | 欧美一区二区在线刺激视频 | 97视频免费在线观看 | 精品久久久久一区二区国产 | 美女视频黄网站 | 欧美日韩中文字幕在线视频 | 中文字幕在线观看1 | 天天爽天天爽天天爽 | 在线观看国产一区 | 精品影院 | 久久久久久久久久久影视 | 免费三级a| 91chinese在线 | 亚洲情感电影大片 | 能在线观看的日韩av | 日本久久成人中文字幕电影 | 91中文字幕在线播放 | 最新色站 | 国产黄色精品 | 国产免费观看av | 精品一二三四视频 | 久久99国产精品久久99 | 中文字幕在线播放日韩 | 亚洲色图色 | 久久精久久精 | 国产精品久久久久久久久久久久午夜 | 人人超碰免费 | 欧美日韩国产在线一区 | 久久国产精品久久国产精品 | 91视频在线播放视频 | 国产福利av | 欧美精彩视频在线观看 | 91免费观看视频网站 | 国产精品一区欧美 | 色综合久久久久综合体 | 在线а√天堂中文官网 | 国产精品国产三级国产aⅴ9色 | 国产五十路毛片 | av在线一二三区 | 在线欧美最极品的av | 色姑娘综合 | 亚洲第一香蕉视频 | 天天干天天干 | 欧美一区二区视频97 | 欧美日韩高清在线观看 | 亚洲伦理精品 | 天堂av在线免费观看 | 色五月成人 | 狠狠的操| 成人综合婷婷国产精品久久免费 | 日韩二区三区在线 | 亚洲精品国产成人av在线 | 国产精品免费视频网站 | 成人教育av | 欧美成人性网 | 五月婷婷伊人网 | 亚洲综合视频网 | 国产探花 | 亚av在线| 欧美在线观看禁18 | 激情欧美一区二区三区 | 日韩av不卡在线观看 | 国产精品正在播放 | 91av手机在线 | 911精品视频 | 国产二区视频在线观看 | 久久亚洲在线 | 久草线 | 国产v视频 | 91免费日韩 | 久精品视频在线观看 | 日韩精品中文字幕在线观看 | 99视频在线精品国自产拍免费观看 | 一本一道久久a久久精品蜜桃 | 亚洲国产日韩精品 | 在线 国产 日韩 | 国产裸体视频bbbbb | 在线激情av电影 | 在线免费色 | 久久激情精品 | 一本一本久久a久久精品综合 | 国产精品黄色 | 成人在线观看av | av成人免费 | 婷婷国产在线 | 天天干.com | 欧美精品一区二区免费 | 九草视频在线 | 久久热亚洲 | 日韩中文字幕视频在线 | 婷婷综合国产 | 97超碰在线免费观看 | 欧美成亚洲 | 免费观看一级成人毛片 | 国产精品黄色av | 91av视频播放 | 色综合色综合色综合 | 国产精品久久久毛片 | 97精品欧美91久久久久久 | 久久公开免费视频 | 午夜影院一级 | 精品视频在线观看 | 最近能播放的中文字幕 | 四虎成人精品在永久免费 | 91粉色视频| 久久久99精品免费观看app | 国模吧一区 | 亚洲成人av免费 | 在线之家官网 | 色99之美女主播在线视频 | 日日夜夜操操操操 | 在线观看岛国av | 天天插天天射 | 黄色特一级 | 日本成人黄色片 | 精品国产伦一区二区三区 | 黄色三级网站在线观看 | 福利区在线观看 | 国产91对白在线 | 91丨九色丨蝌蚪丰满 | 国产精品成人在线 | 免费在线黄色av | 在线午夜电影神马影院 | 久久精品一二三区白丝高潮 | 欧美日本一区 | 99视频在线观看视频 | 91高清视频免费 | 超碰资源在线 | 国产在线观看,日本 | 久久久国产视频 | 97免费视频在线播放 | 美女免费视频一区 | 国产亚洲精品久久久久久移动网络 | 天天综合成人网 | 日日插日日干 | 日韩av影视在线 | 久久99久久99精品免费看小说 | 韩国av一区二区三区 | 日韩一级电影网站 | 天天操夜夜操天天射 | 色av男人的天堂免费在线 | 免费a现在观看 | 中文字幕在线免费播放 | 爱爱av网| 成人免费 在线播放 | 亚洲国产大片 | 综合网天天 | 欧洲视频一区 | 成人永久在线 | 国产精品久久久久9999 | se视频网址 | av网站在线免费观看 | 国产精品中文久久久久久久 | 欧美另类调教 | 人人草在线视频 | 99c视频高清免费观看 | 国产美女主播精品一区二区三区 | 人人爽人人澡 | 一区二区视频电影在线观看 | 91亚洲精品国偷拍自产在线观看 | 国产又粗又猛又爽又黄的视频免费 | 日韩欧美高清视频在线观看 | 免费在线黄网 | 99久久精品午夜一区二区小说 | 色婷婷视频在线观看 | 久久人人爽人人爽人人片av免费 | 国产高清成人 | 亚洲精品黄网站 | www免费黄色 | 天天天天色综合 | 欧美少妇的秘密 | 国产成人中文字幕 | 久青草电影| 精品一区二区三区久久久 | 国产日产在线观看 | 973理论片235影院9 | 免费看av在线 | 亚洲一区二区三区四区在线视频 | 91欧美在线 | av黄色大片 | 视频在线一区二区三区 | 亚洲女人av | 中文字幕av一区二区三区四区 | 亚洲成a人片77777潘金莲 | 成人午夜电影免费在线观看 | 色99导航 | 96精品在线 | 久草久草久草久草 | 在线黄色国产电影 | 欧美日韩国产一区二区三区 | 91亚洲成人 | 天天曰夜夜爽 | 一级黄色av| 色婷婷色 | 欧美在线视频一区二区三区 | 国产精品麻豆免费版 | 最近中文字幕免费观看 | 欧美一区二区免费在线观看 | 丁香综合五月 | 91色在线观看 | 成人av片免费观看app下载 | 欧美成人中文字幕 | 精品视频区 | 亚洲男男gaygay无套 | 亚洲作爱 | 麻豆一区二区三区视频 | 日日添夜夜添 | 国产精品免费一区二区 | 91在线免费视频观看 | 少妇性bbb搡bbb爽爽爽欧美 | 午夜一级免费电影 | 黄色a在线| 欧美日韩国产亚洲乱码字幕 | 欧美精品一区在线 | 亚洲专区视频在线观看 | 国产黄在线免费观看 | 国产麻豆剧果冻传媒视频播放量 | 欧美精品一区二区在线播放 | 在线视频日韩一区 | 国产成人1区| 欧美日韩午夜爽爽 | 欧美激情精品久久久久 | 日本黄区免费视频观看 | www.亚洲激情.com | 亚洲伊人第一页 | a v在线观看 | 91手机视频在线 | 96亚洲精品久久 | 在线观看av国产 | 91 中文字幕 | 日韩亚洲在线观看 | 国产+日韩欧美 | 91一区二区三区久久久久国产乱 | 91丨九色丨蝌蚪丨老版 | 九九九热精品免费视频观看网站 | 在线观看黄色免费视频 | 欧美日韩中文国产 | 亚洲一区网站 | 中文字幕国产一区 | 在线欧美日韩 | 国产精品中文 | 91成人观看 | 欧美日韩国语 | 91麻豆精品国产午夜天堂 | 精品电影一区 | 超碰人人草 | 视频一区二区精品 | 国产精品欧美久久 | 欧美精品亚洲精品 | av成人动漫在线观看 | 99久久www免费 | 久草网站在线观看 | 香蕉精品视频在线观看 | 久久久久免费精品视频 | 黄色a大片| 99久久精品免费看 | 国产麻豆果冻传媒在线观看 | av一区二区三区在线播放 | 日韩精品久久一区二区三区 | 麻豆国产精品一区二区三区 | 免费精品国产va自在自线 | 国产亚洲免费的视频看 | 亚洲一区二区高潮无套美女 | 青青河边草免费视频 | 国产黄av | 91cn国产在线 | 五月婷婷香蕉 | 免费毛片一区二区三区久久久 | 日韩免费成人 | 爱av在线网 | 免费久久网站 | 色香com. | 日韩中文字幕在线 | 91av蜜桃| 欧美伦理一区 | 久久综合九色综合久久久精品综合 | 中文字幕一区二 | 波多野结衣一区 | 精品久久久亚洲 | av免费福利 | 日韩激情在线视频 | 91精品国自产在线观看欧美 | 亚洲一二视频 | 国产一区电影在线观看 | 久草青青在线观看 | 三级av免费看 | 亚洲天堂网在线播放 | 久久久精品亚洲 | 激情综合五月婷婷 | 久久99精品国产91久久来源 | 国产婷婷vvvv激情久 | 91九色porn在线资源 | 四虎小视频| 午夜精品久久久久久久99婷婷 | av免费在线播放 | 黄色99视频| 久久综合九色综合网站 | 天天综合五月天 | 亚洲国产黄色片 | 欧美国产高清 | 视频在线观看日韩 | 欧美成人999 | 999精品网| 成人在线播放免费观看 | 91免费观看视频在线 | 激情电影在线观看 | 成人黄在线观看 | 成人黄色毛片 | 日韩a级黄色片 | 亚洲乱码国产乱码精品天美传媒 | 国产精品密入口果冻 | 日韩欧美国产精品 | 500部大龄熟乱视频 欧美日本三级 | 亚洲国产片 | 欧美特一级 | 免费不卡中文字幕视频 | 午夜精品一区二区三区可下载 | 麻豆91在线播放 | 97在线精品国自产拍中文 | 国产精品久久久久久麻豆一区 | 国产成人99久久亚洲综合精品 | 欧美综合色在线图区 | 在线观看你懂的网址 | 日韩精品中文字幕一区二区 | 毛片激情永久免费 | 欧美大片第1页 | 五月天网页 | 亚洲欧美日韩国产精品一区午夜 | 久久久亚洲精华液 | 日韩精品免费一区二区在线观看 | 成人cosplay福利网站 | 夜又临在线观看 | 亚洲精品在线免费观看视频 | 国产精品成人久久久久 | 在线观看v片 | 精品久久久久一区二区国产 | 国产三级午夜理伦三级 | 久久久久久久久久久久国产精品 | 天天操天天添 | 69av在线视频 | 欧美二区在线播放 | 97色资源 | 丁香高清视频在线看看 | 日韩成人免费在线电影 | 免费看成年人 | 日韩精品一区二区电影 | 亚洲国产av精品毛片鲁大师 | av无限看| 久久艹艹| 在线精品视频在线观看高清 | 国产自偷自拍 | 国产福利免费看 | 久久视频这里有精品 | 久久国产露脸精品国产 | 91精品在线观看视频 | 爱射综合 | 久久av伊人 | 又色又爽的网站 | 久久电影中文字幕视频 | 欧美黄在线 | 黄色一级大片免费看 | 国产麻豆电影 | 日本性生活免费看 | 色吊丝在线永久观看最新版本 | 久久久久女教师免费一区 | 国产一级在线观看 | 麻豆国产在线视频 | a天堂中文在线 | 久久韩国免费视频 | 草久在线 | 99视频导航 | 又粗又长又大又爽又黄少妇毛片 | 国产96在线| 日韩精品一区二区在线观看视频 | 国产麻豆精品传媒av国产下载 | 国产人成在线视频 | 四虎国产免费 | 夜夜骑首页 | 在线观看黄色av | 久久国产精彩视频 | 日韩av不卡在线观看 | 精品国产一区二区三区免费 | 国内精品国产三级国产aⅴ久 | 亚洲一级片免费观看 | 91大神视频网站 | 久久一区二区免费视频 | 色国产精品 | 91麻豆精品久久久久久 | 欧美精品国产精品 | 色欧美成人精品a∨在线观看 | 日本动漫做毛片一区二区 | 久久久久久高潮国产精品视 | 四虎影视av| 国产精品久久一区二区三区, | 日本aaa在线观看 | 不卡视频在线 | 大荫蒂欧美视频另类xxxx | 天天色天天射天天干 | 少妇bbb| aaa日本高清在线播放免费观看 | 91精品中文字幕 | 国产看片网站 | 99热这里只有精品8 久久综合毛片 | 三上悠亚一区二区在线观看 | 久久久久99精品成人片三人毛片 | 午夜精品久久久久久久99热影院 | 久久人人爽人人片av | 日韩av有码在线 | 夜色在线资源 | 欧美日韩国产一区二区在线观看 | 日日干干| 色国产精品一区在线观看 | av一二三区 | 天天干天天草天天爽 | 午夜免费视频网站 | 在线之家免费在线观看电影 | 日韩免费观看视频 | 国产手机视频在线 | 色婷婷www | 四虎在线永久免费观看 | 日韩av片无码一区二区不卡电影 | 日韩啪啪小视频 | 韩国视频一区二区三区 | 欧美日韩在线观看一区二区三区 | 91日韩精品视频 | 国产免费激情久久 | 亚洲 欧洲av | 免费久久视频 | 国产精品视频你懂的 | 欧美老女人xx | 麻豆视频国产 | 国产第一页在线观看 | 欧美一级欧美一级 | 91网址在线看 | 中文字幕在线观看免费 | 在线国产片 | 国产精品一区二区视频 | 福利视频区 | 最新国产在线观看 | 808电影免费观看三年 | 中文字幕999 | av电影不卡在线 | 欧洲精品亚洲精品 | 波多野结衣电影一区二区三区 | 日韩在线观看视频一区二区三区 | 国产99久久久久 | 亚洲日本黄色 | 欧美日韩国产区 | 黄色小说18 | 在线精品国产 | 免费高清无人区完整版 | 日韩黄色在线电影 | 免费精品在线 | 欧美日韩二区三区 | 久久免费视频在线 | 日韩欧美一级二级 | 日韩精品aaa | 福利网址在线观看 | 亚洲一区二区三区在线看 | 国产日韩av在线 | 粉嫩一区二区三区粉嫩91 | 精品国产理论 | 狠狠色丁香久久综合网 | 精品美女久久久久 | 一区二区伦理电影 | 99久久日韩精品视频免费在线观看 | 日韩精品视频在线观看网址 | 韩日色视频| 免费在线观看不卡av | 奇米网444 | 日韩一区二区三区在线看 | 国产一级视频 | 黄色精品免费 | 久久手机看片 | 久久综合九色综合97_ 久久久 | 五月开心六月伊人色婷婷 | 久久精品电影 | 久久精品视频2 | 久久精品这里热有精品 | 久久视频免费在线观看 | 国产成人精品一区二 | 人人爽人人爽人人爽人人爽 | 最近免费中文视频 | 日韩精品久久久久久 | 懂色av一区二区三区蜜臀 | 香蕉精品视频在线观看 | 日本激情动作片免费看 | 91九色精品国产 | 天干啦夜天干天干在线线 | 韩国av免费在线观看 | 日韩精品视频第一页 | 亚洲精品午夜视频 | 久久午夜精品视频 | 婷婷午夜天 | 日韩在线免费高清视频 | 亚洲成人黄色 | 亚洲一级二级 | 日韩免费电影一区二区 | 高清av免费一区中文字幕 | 久久99国产精品久久99 | 视频在线99re | 在线观看91视频 | 二区中文字幕 | 99精品免费在线 | 久久精品视频在线 | 日韩一区二区三免费高清在线观看 | 欧洲精品在线视频 | 黄色网址a | 欧美成人在线免费 | 免费视频a | 天天爱天天操天天爽 | 久久久久一区二区三区四区 | 久久久久久久久久久综合 | 在线观看久久 | 午夜美女wwww | 精品影院| 99九九99九九九视频精品 | 草草草影院 | 日韩欧美国产精品 | 开心丁香婷婷深爱五月 | 五月婷婷视频在线 | 国产高清在线不卡 | 欧美久久久 | 六月色| 国产一级片免费播放 | www.五月天婷婷.com | 久草av在线播放 | 精品国产观看 | 波多野结衣网址 | 99久久夜色精品国产亚洲 | 久久亚洲精品国产亚洲老地址 | www欧美色| 天天综合网天天综合色 | 色综合天天狠天天透天天伊人 | 亚洲精品久久在线 | 日本mv大片欧洲mv大片 | 精品国产亚洲日本 | 欧美成人xxx | 国产伦理剧 | 91麻豆精品国产自产 | 国产精品mv| 96久久欧美麻豆网站 | 最近更新中文字幕 | 国产美女精品人人做人人爽 | 国产亚洲情侣一区二区无 | 国精产品999国精产品岳 | 九九久 | 国产1级毛片 | 国产精品高清在线观看 | 美女福利视频在线 | 日韩av一区二区三区 | 日韩高清在线一区二区三区 | 天天射天天操天天色 | 六月色丁| 欧美一级视频在线观看 | 国产精品国内免费一区二区三区 | 最新国产一区二区三区 | 成年美女黄网站色大片免费看 | 91av视频导航 | 一本一道久久a久久精品蜜桃 | 99久久久久久久久久 | 免费看搞黄视频网站 | 国产精品99久久免费黑人 | 中文字幕一区2区3区 | 久久久久久久久久久免费视频 | 亚洲国产欧美在线人成大黄瓜 | 夜夜躁狠狠躁日日躁视频黑人 | 成人黄色在线看 | www免费黄色 | 亚洲成人动漫在线观看 | 久久精品一区二区三区四区 | 色999视频| 日本特黄一级片 | av一级在线观看 | 黄色三级免费网址 | 午夜av网站 | 国产亚洲成av人片在线观看桃 | 视频在线一区 | 在线观看国产日韩欧美 | 性色av香蕉一区二区 | 夜夜操狠狠干 | 91成人免费在线视频 | 特级毛片爽www免费版 | 色综合色综合久久综合频道88 | 久久久久 免费视频 | 日韩中文字幕免费在线观看 | 日日爽夜夜操 | 91精品国产福利 | 久草精品视频在线播放 | 亚洲专区欧美专区 | 一级α片| 久久久久看片 | 日本午夜在线亚洲.国产 | 国产精品一区二区三区99 | 国产精品美女免费看 | 九九九在线观看 | 成人av影视观看 | 丁香综合激情 | 欧美日韩一区二区三区在线观看视频 | 少妇bbbb搡bbbb搡bbbb | 成全免费观看视频 | 在线v片免费观看视频 | 久久久久久影视 | 成人免费大片黄在线播放 | 在线观看av国产 | 黄色软件视频大全免费下载 | 国产视频亚洲 | 一区二区三区在线观看免费视频 | www九九热| 超碰精品在线 | 四虎永久免费在线观看 | 中文在线字幕免费观看 | 亚洲一区久久久 | 91成人免费观看视频 | 免费三级影片 | 免费看久久久 | 一级一片免费看 | 99这里都是精品 | a黄色一级 | 91av视频导航| 99999精品| 午夜视频在线观看一区 |