自己動手打造mini型QQ(二):從區域網到網際網路的miniQQ
上一篇部落格:我們實現了局域網下的QQ互聯通訊: 動手實現區域網仿QQ互聯
本篇部落格我們把通訊範圍拓展到整個網際網路
私有/公有ip
為什麼socket綁定了ip地址和埠後,只能在區域網中通訊呢,這就需要我們區分私有ip和公有ip
公有IP
公有IP地址是由INIC(Internet Network Information Center 因特網資訊中心)負責。這些IP地址分配給向INIC提出申請併成功註冊的組織機構。通過公有IP地址能直接訪問因特網,當然公有IP是要錢的。
私有IP
隨著網路的發展,為節省可分配的註冊IP地址,有一組IP地址被拿出來專門用於私有IP網路,稱為私有IP地址。私有IP地址範圍:
A類: 10.0.0.0~10.255.255.255
B類:172.16.0.0~172.31.255.255
C類:192.168.0.0~192.168.255.255
這些地址是不會被Internet分配的,它們在Internet上也不會被路由,雖然它們不能直接和Internet網連線,但通過技術手段仍舊可以和 Internet通訊(NAT技術)。公網IP是直接與英特網連線可以直接訪問網路(上網),而私有IP地址則是在區域網中使用的IP地址,私有IP是不能直接上網的(無法直接和公網通訊),當私有網路內的主機要與位於公網上的主機進行通訊時必須經過地址轉換,將其私有地址轉換為合法公網地址才能對外訪問。也就是要使用NAT-Network Address Translation 網路地址轉換技術。
那麼平時我們的電腦是如何上網的呢?比如我們辦理了電信寬頻,拉一根網線連線到我們的電腦,我們的電腦就能上網了。實質上此時我們的電腦是一個私有IP,電信那邊購買了一個公有IP,我們電腦和電信的公有IP之間有一個NAT技術裝置,也就是說我們能上網是通過電信的公有IP實現的。
如果在家安裝了路由器我們的多臺電腦連線在這個路由器上,那麼這些電腦直接就構成了區域網,在這幾臺電腦上可以直接進行區域網的通訊。但是你家裡構成的區域網和公司的區域網是不能通過區域網通訊的。
在這裡記錄私有IP和公有IP的原因在於socket網路通訊需要區別,以便我們知道哪些IP之間是不能通訊的,哪些IP之間是可以通訊的。從上述原理我們就知道同一個區域網內的裝置A和裝置A,裝置A和裝置B,廣域網內的裝置A和裝置B可以實現雙向連線通訊,區域網的裝置A和廣域網的裝置B可以單向連線(只能由區域網去連線廣域網,也就是區域網是客戶端,廣域網是服務端;因為廣域網的IP是固定且唯一的,區域網連線網路通過指定這個公有IP就能找到這臺計算機,找的過程是區域網連線電信網路,通過NAT技術將這個區域網私有IP轉換為公有IP然後再去和指定的公有IP通訊,這樣就可以找到指定的公有IP,相反私有IP是不能被公有IP找到的)通訊。不同區域網之間的裝置不能通訊。
私有ip和公有ip參考了部落格 https://blog.csdn.net/youand_me/article/details/83109238
思路分析
瞭解上述區別了,我們要解決的一個問題是,獲得一個可自由使用公有ip,這裡推薦使用阿里雲伺服器,下面就是整個server/client系統上雲的配置過程。
阿里雲伺服器配置
購買阿里雲伺服器
點選: 購買介面傳送門

2.png
選擇最低配置即可滿足需求,完成學生認證後伺服器低至9.5元/每月,阿里爸爸算是比較良心了哈哈
如果你不願花錢,可以聯絡我免費使用我的阿里雲伺服器。前提是我的伺服器沒有到期。

3.png
這裡有系統映象和應用映象,我的理解是應用映象是在系統映象上預裝了一些應用軟體,這裡我選擇的是系統映象、Ubuntu 16.04 64位系統,其實這些配置在購買完成後是可以修改的,相等於重灌系統。
由於是Linux系統,需要掌握一些基本的linux終端命令,這個很簡單,百度十分鐘就學會了。
雲伺服器配置
在 概覽
處修改密碼

4.png

5.png
在 防火牆
處設定規則
伺服器預設只開放了指定埠,如果想要通過更多埠來訪問伺服器,我們需要新增一個規則,下圖中最後一個規則就是我新增的

6.png
雲伺服器環境搭建
點選頁面右上角的 遠端連線
,可開啟一個遠端連線終端,我們就是這樣來控制伺服器的,玩過linux系統的同學應該很熟悉。
輸入 sudo su root
切換至root身份

7.png
雖然報了個錯,但是也切換到root了,暫且忽略這個錯誤,注意最好不要使用螢幕提示的那樣升級Ubuntu至18.04.
由於我們的是用python編碼的,所以需要python環境,而ubuntu是預裝了python的,不過是python2.7,我們可以通過 python -V
來檢視python版本,所以下一步我們要做的就是安裝python3,注意一定一定不要解除安裝python2,否則系統會非常脆弱。
安裝
wget https://www.python.org/ftp/python/3.6.3/Python-3.6.3.tgz
解壓安裝包
tar zxvf Python-3.6.3.tgz
切換到解壓目錄
cd Python-3.6.3
安裝配置,同時指定安裝路徑
./configure --prefix=/usr/local/python36
編譯
make
安裝
make install
到此為止python3安裝完畢,此時輸入 python -V
,不出意外依然是輸出python2.7,還需要一步修改python3為預設才行,這個過程叫做軟連線
軟連線
mv /usr/bin/python /usr/bin/python.bak
ln -s /usr/local/python36/bin/python3.6 /usr/bin/python
到此python3的環境算是完全配置好了。
上傳python程式碼
下一步就是要把我們的程式碼上傳到阿里雲伺服器了,為了以後方便,先在雲伺服器上新建一個 myfile
資料夾,命令是:
mkdir myfile

8.png
然後windwos下連線linux伺服器還需要下載一個軟體,putty,非常小巧,也非常強大、好用
putty傳送門: 點選下載
下載好之後安裝,除了修改安裝路徑其餘都是一直next,最後finish。
在“執行”中輸入cmd,開啟控制檯,切換到剛才Putty的安裝目錄下,我的是d:\putty,然後輸入pscp命令,我們需要這個命令來實現檔案的上傳。如下圖所示,命令格式為:
pscp C:\Users\lenovo\Desktop\aliyun\ server.py [email protected] .xx:/home/admin/myfile/
即pscp 要上傳的檔案路徑 伺服器賬號@伺服器IP地址:要存放在伺服器的位置路徑,伺服器賬號一般固定是root
輸入命令後出來這個:

9.png
n
吧,回車後再輸入密碼,如果沒出錯的話,檔案已經上傳到伺服器了,在伺服器上可以通過
ls
命令檢視
執行python程式碼
理論上說使用命令:
python server.py
就能執行python了,但是這樣有一個缺點就是一旦把連線終端關閉,server.py執行的程序已經被殺死了。要想一天24小時使程式碼在後臺執行,可使用命令。
nohup python server.py &
程式碼列印資訊不再在終端輸出,而是儲存在了同目錄下的nohup.out裡。
執行結果示例

10.png
左邊是雲伺服器,右邊是本地客戶端