利用Python製做一個只屬於和她的聊天器,不再用擔憂隱私泄露啦!

------------恢復內容開始------------python

是否擔憂微信的數據流會被監視?是否擔憂你和ta聊天的小祕密會被保存到某個數據庫裏?不要緊,如今咱們能夠用Python作一個只屬於你和ta的聊天渠道,來解除大家心中的擔心。數據庫

1.原理簡介

在咱們今天的教程中,將用到即時通信的概念,即時通信容許兩人或多人同時使用網絡傳遞文字信息、文字、語音等。即時通信通常都基於socket鏈接,socket鏈接可用於發送或接受數據,通常的組合形式是IP+端口號安全

也就是說,在咱們的例子中,聊天的雙方,由一方要承擔「服務器 」 的責任,維持一個socket服務器,等待鏈接進入;另外一方則是「客戶端」,在服務器端維持等待狀態時便可發送請求,創建鏈接。服務器

當你和ta想進入「小黑屋 」 裏聊天的時候,只有有一方充當服務器,另外一方充當客戶端便可,做爲「服務器端 」 的那我的,在微信中將IP和端口號告訴對方,便可構建鏈接,在小黑屋裏聊天,這個小黑屋裏的數據不會被任何數據庫保留(除非你本身作了一個保存的數據庫)。微信

2.代碼編寫

好了,基本原理咱們已經講清楚了。不過,在開始教程以前,你得先安裝好了Python網絡

2.1 服務器端

聊天的時候,咱們有時候會遇到雙方同時發消息的狀況。這種聊天方式就叫全雙工聊天方式:「服務器」可向「客戶端」發送消息,「客戶端」也可向「服務端」發送消息,並且容許同時發送消息。多線程

服務器端怎麼實現全雙工的聊天方式呢?其實很簡單,只要用多線程就好了,主線程用於接收客戶端的鏈接,鏈接成功後新建兩個線程:一個用於發送消息,一個用於接收消息:socket

首先,創建socket服務器:函數

​其中,AF_INET指的是用IPv4進行通訊,而SOCK_STREAM指的是TCP協議。端口號你能夠隨意設定,服務器端的IP地址默認爲空便可。工具

在while循環中不斷等待用戶的鏈接。若是有用戶鏈接成功了,咱們將進入下一步,分別創建發送和接受線程:

clientsock就是咱們獲得的socket鏈接,processRecv和processSend分別用於處理接受信息和處理髮送信息:

有個小細節要注意,socket鏈接的sendall函數只支持bytes類型的數據,因此咱們要encode('utf-8')。

服務端的全部代碼就這樣,沒錯,就是這麼簡單。

2.2 客戶端

客戶端則更簡單,主線程自己設定爲接受消息,那麼咱們只須要多一個線程用於發送消息便可。客戶端的所有代碼以下:

其中,HOST部分填寫對方的IP,PORT部分填寫端口號。sys.argv用於經過參數輸入這兩個值,好比咱們將客戶端文件命名爲:client.py, 在cmd中輸入:

python client.py 127.0.0.1 51423

能直接傳入參數執行腳本,除此以外,其餘部分和服務端其實差很少。注意把接受到的數據decode一下(由於咱們發的時候encode了)。

3. 改進

實際上,這份代碼雖然能夠用,可是仍是存在許多問題的。好比在大家聊天的時候,忽然又有一我的向服務端發送鏈接請求怎麼辦?這時候咱們須要在服務端加一份擁有驗證的代碼,要求對方輸入聊天室密碼後纔可創建鏈接。

這個密碼必須是大家雙方纔知道的密碼,任何經過第三方工具傳播密碼的行爲都是不可靠和不安全的。這樣才能夠防止第三者的偷聽。增長一個密碼功能其實也不難,這部分交給你們本身去實現啦!

------------恢復內容結束------------

相關文章
相關標籤/搜索