您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關如何用Python制作只屬于你和ta的聊天渠道,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
是否擔心微信的數據流會被監視?是否擔心你和ta聊天的小秘密會被保存到某個數據庫里?沒關系,現在我們可以用Python做一個只屬于你和ta的聊天渠道,來解除你們心中的擔憂,畢竟只有自己做的東西才最放心。
在我們今天的教程中,將用到即時通訊的概念,即時通訊允許兩人或多人同時使用網絡傳遞文字信息、文字、語音等。即時通訊一般都基于socket連接,socket連接可用于發送或接受數據,一般的組合形式是IP+端口號。
也就是說,在我們的例子中,聊天的雙方,由一方要承擔“服務器 ” 的責任,維持一個socket服務器,等待連接進入;另一方則是“客戶端”,在服務器端維持等待狀態時即可發送請求,建立連接。
當你和ta想進入“小黑屋 ” 里聊天的時候,只有有一方充當服務器,另一方充當客戶端即可,作為“服務器端 ” 的那個人,在微信中將IP和端口號告訴對方,即可構建連接,在小黑屋里聊天,這個小黑屋里的數據不會被任何數據庫保留(除非你自己做了一個保存的數據庫)。
好了,基本原理我們已經講清楚了。不過,在開始教程之前,你得先安裝好了Python,如果還沒有安裝,可以看這篇文章:<基礎教程>Python超詳細安裝指南
聊天的時候,我們有時候會遇到雙方同時發消息的情況。這種聊天方式就叫全雙工聊天方式:“服務器”可向“客戶端”發送消息,“客戶端”也可向“服務端”發送消息,而且允許同時發送消息。
服務器端怎么實現全雙工的聊天方式呢?其實很簡單,只要用多線程就行了,主線程用于接收客戶端的連接,連接成功后新建兩個線程:一個用于發送消息,一個用于接收消息:
首先,建立socket服務器:
其中,AF_INET指的是用IPv4進行通信,而SOCK_STREAM指的是TCP協議。端口號你可以隨意設定,服務器端的IP地址默認為空即可。
在while循環中不斷等待用戶的連接。如果有用戶連接成功了,我們將進入下一步,分別建立發送和接受線程:
clientsock就是我們得到的socket連接,processRecv和processSend分別用于處理接受信息和處理發送信息:
有個小細節要注意,socket連接的sendall函數只支持bytes類型的數據,所以我們要encode('utf-8')。
服務端的所有代碼就這樣,沒錯,就是這么簡單。
客戶端則更簡單,主線程本身設定為接受消息,那么我們只需要多一個線程用于發送消息即可。客戶端的全部代碼如下:
其中,HOST部分填寫對方的IP,PORT部分填寫端口號。sys.argv用于通過參數輸入這兩個值,比如我們將客戶端文件命名為:client.py, 在cmd中輸入:
python client.py 127.0.0.1 51423
能直接傳入參數執行腳本,除此之外,其他部分和服務端其實差不多。注意把接受到的數據decode一下(因為我們發的時候encode了)。
實際上,這份代碼雖然可以用,但是還是存在許多問題的。比如在你們聊天的時候,突然又有一個人向服務端發送連接請求怎么辦?這時候我們需要在服務端加一份擁有驗證的代碼,要求對方輸入聊天室密碼后才可建立連接。
這個密碼必須是你們雙方才知道的密碼,任何通過第三方工具傳播密碼的行為都是不可靠和不安全的。這樣才可以防止第三者的偷聽。增加一個密碼功能其實也不難,這部分交給大家自己去實現啦!
關于如何用Python制作只屬于你和ta的聊天渠道就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。