尋夢新聞LINE@每日推播熱門推薦文章,趣聞不漏接❤️
網路編程的重要性不低於數據庫操作,而且兩者通常是同時存在,比如用python寫一個爬蟲程序,最終抓取的數據保存入庫,寫了一個web項目,用戶註冊,登錄,提交訂單等數據最終也要保存到我們的數據庫中,可見網路編程的重要性。所以我會拿出三講的時間,分別介紹python中socket編程,爬蟲和web服務器。 和大家一起理解網路編程。
學完此次課程,我能做什麼?
學完此次課程,我們可以使用socket建立一個簡易的socket服務器和socket客戶端,並且可以進行通信。
學習此次課程,需要多久?
5-10分鐘
課程內容
什麼是socket?
socket翻譯過來稱為套接字,是一個基本的網路組件,過於詳細的介紹大家可以百度一下,不在這里說了,只講幾個項目中的重點:socket提供長連接,建立兩個點之間的信息通道;需要編寫socket服務器端和socket應用端,可以理解為聊天程序的服務器和聊天程序的客戶端。
為什麼要使用socket?
想一下如何做到一個web聊天程序?如果沒有websocket的相關知識,會不會很low的用ajax做到?每隔5秒請求一次服務器看有沒有消息返回。這樣做的缺點很明顯:死循環,無限請求服務器,對服務器壓力增大。實時性差,無法第一時間收到消息,需要等待下次循環。
看一下Ajax方式的示意圖:
有了socket這個問題就可以迎刃而解,首先客戶端與服務端建立長鏈接,服務器可以接受信息,也可以主動推送信息給已連接的客戶端程序,而客戶端可以主動發送給服務器信息,也可以被動的接受服務器的推送信息。
看一下Socket方式示意圖:
很明顯socket和http相比是長鏈接,雙向通信,11點58分11秒客戶端1給服務器發送了一條信息,服務器接收後立即推送給客戶端2,客戶端2通過接受方法,處理信息,顯示給用戶,優點是不是很明顯?趕緊學習一下如何使用吧。
上面已經說過socket要編寫服務端和客戶端的程序,那我們先寫一下用於監聽的服務端:
注意點:
第一步:創建socket鏈接
s = socket.socket(family=AF_INET, type=SOCK_STREAM, proto=0, fileno=None)
AF_INET:使用ipv4的方式通訊,默認即可。
type:SOCK_STREAM 是 TCP方式, SOCK_DGRAM 是 UDP方式鏈接,關於tcp和udp的協議理解大家記住TCP數據傳輸可靠,效率低於UDP。相反UDP不確保數據是否傳輸成功,效率高。
第二步:bind()函數,綁定ip地址和端口號,linux下端口號小於1024的為系統保留,使用需要root權限,為了保證程序正常運行,最好使用1024以上的端口。
第三步:list()函數,設置允許排隊等待鏈接的數量,由於accept為阻塞方法,所以要設置等待鏈接的數量,後面我們會講如何解決阻塞。
第四步:接收信息,輸出信息。
看一下客戶端的代碼:
客戶端相對來說比較簡單,創建鏈接後,使用connect()鏈接服務器即可。
看一下運行結果:
服務端列印出客戶端發來的信息Hello,而客戶端輸出了 服務端返回的信息。
使用python做到一個socket服務器就是這麼簡單,其他功能也是在這個基礎上來做到,無非是接受,轉PO,處理各類消息。
小結
今天我們學習了,Python中的socket,了解了如何建立一個socket服務器程序,以及客戶端如何編寫,了解了整體的流程,後期我們會在這個基礎上結合wxpython來做到一個聊天軟件。
接下來學習什麼?
接下來,我們會學習一下大名鼎鼎的爬蟲,通過python如何快速做到一個簡易爬蟲。
關注頭條號,回復python基礎,獲取所有代碼+電子書