Python 網絡編程入門:套接字(Socket)通信簡介
聲明:本編推送前半部分內容翻譯自: https://realpython.com/python-sockets/
在如今的課堂上,學生與老師使用網際網路的頻率越來越高,尤其是教育資源線上化,導致老師和學生要花很多時間在各個平臺之間,使用教學資源,提交線上作業等等。當然還有部分學生利用網際網路在做與學習無關的事。
所以針對於這個事實,我們希望更高效地進行日常教學,就不妨自己建立一個簡單的教室教學網絡平臺!
這樣一個平臺的優點包括:
1.所有的教學資源,作業評價,成績分析等全部可以整合到完全由教師控制的網絡應用上,教師的電腦就充當一個小型伺服器。
2.所有學生的移動終端須接入教師設置的本地網絡,防止學生利用網際網路做與學習無關的事(實時監測學生是否在線)
要做到這一步,首先就要實現計算機之間的通信,在這裡不過多介紹理論,先看一個最簡單的伺服器-客戶端的例子。
伺服器-客戶端架構是網際網路應用最基礎的架構,就像我們去餐廳吃飯,我們就是客戶,先找服務員點菜,服務員接受訂單後交給後廚,然後把做好的菜餚端上你的桌面。在網際網路應用中,客戶端(瀏覽器,網絡應用)向指定的伺服器發送請求,伺服器根據請求向客戶端返回所需要內容。
https://www.cnblogs.com/dalaoban/p/9331113.html
現在我們將在同一臺計算機上運行伺服器和客戶端程序。現在開始!
1.在現有工作路徑下新建一個文件夾,我們的伺服器和客戶端程序都將放到這個文件夾裡
2.新建兩個空白python文件,一個叫echo_server.py(伺服器代碼), echo_client.py(客戶端代碼)
在開始編寫代碼之前,我們需要學習另外一個小技能,通過命令行終端啟動程序。以蘋果系統為例,通過搜索打開終端
得到類似下面的界面
其實每一個終端界面就如同一個小客戶端,我們的電腦就是一個伺服器,因此我們可以同時開啟多個終端。
進入終端後,我們需要找到放置echo_server.py和echo_client.py的文件夾,在一個終端中使用ls命令
ls命令的功能是列出目前路徑下的所有文件與文件夾。因為我將先前的兩個python文件放到了「OneDrive-北京大學附屬中學」這個文件中,所以需要進到這個路徑中。
使用命令」cd OneDrive-北京大學附屬中學」來改變工作路徑.
事實上,您不需要完整地打出「OneDrive-北京大學附屬中學」,只需要打出部分字符然後按下」tab」鍵,系統會自動幫您補全信息。
因此您可以這樣連續使用ls+cd直到目標工作路徑。
下邊使用IDLE打開echo_server.py,咱們先來寫伺服器端的部分
將這部分代碼儲存好之後,可以在終端中運行,
這時伺服器將會隨時監測從客戶端傳遞的請求,然後將客戶端傳過來的信息原封不動的再傳回去,之後結束這個套接字進程。
下邊是一個簡易的客戶端程序,還是使用IDLE打開echo_client.py,並寫下以下代碼
寫好之後在終端中運行該客戶端程序
同時在伺服器端可以看到這次通信記錄
最後我們來讓這個伺服器-客戶端程序具備一點實際應用功能,
實時記錄學生是否在線!
將伺服器代碼更改一下,添加一個記錄在線學生信息的功能
這個伺服器程序同時執行著兩個功能,一個是實時準備接收和處理從各個客戶端傳遞過來的信息。另外每隔5秒鐘,在終端中列印出上一個記錄周期內登記的學生信息。
下面再來寫一個模擬學生登記的客戶端程序
這個客戶端在運行後,每隔1-3秒鐘不等時間,往伺服器傳遞一個學生的姓名。伺服器將在一個記錄周期內記錄這些信息,並輸出。
下面來看當伺服器和這個模擬客戶端同時運行一段時間後的結果。
伺服器程序
客戶端程序
可以看到,在伺服器輸出的信息中,每一個列表都記錄了在上一個周期內登錄的學生。這樣可以保證,只要學生5秒鐘(或任意時間)內不在線,馬上就可以找到他!
現在了解套接字編程的基本步驟後,之後就來發揮您的想像力,來實現您的種種想法吧!!