網路程式設計一定要看過的socket大山
python已經可以做很多的東西了。但是要想要和別人互聯互通就會涉及到一個關鍵的模組socket!值得一提的是,其實socket不是python獨創的一種模組,而是任何語言都會有的一個部分!自己的程式和別的電腦進行連線的時候都會用到這個方式!
但是,首先還是來看看網路通訊的相關的知識,然後再慢慢的瞭解socket!
其實根據不同的場景大概可以分為兩種情況:C/S架構和B/S架構
C/S架構的意思就是客戶端和服務端的連線方式。就像是手機上的某些app程式和人家公司的伺服器的溝通一樣。
B/S 就是瀏覽器和服務端的連線方式!有了這樣的統一的協議方式,大家才能用一個瀏覽器就可以訪問不同的網站!
關於網路通訊的整個流程是怎樣的呢?
上網首先就要有網絡卡(就是插網線的地方。)然後還要有一個獨有的身份認證mac地址。mac地址可是全球唯一的。出廠都設計好的。通常是由12位16進位制的數字表示(前六位是廠商編號,後六位是流水線號!)
檢視方法:window在cmd中輸入ipconfig-all這樣的指令
有了mac其實還是不夠的。因為在一個區域網中,如果很多的電腦都用mac作為識別的標誌。而網路傳遞資訊的方式都是通過廣播(交換機會把訊息傳遞給每一個電腦,讓電腦自己進行匹配,如果不是自己電腦的mac地址的,就會把訊息給扔掉!)的形式的話,那麼就很容易造成嚴重的擁堵,而且資訊也是不安全的!
此時,IP的作用就顯示出來了!有了IP就可以和同的區域網中的電腦進行訊息傳遞了!
現在搞清了有mac和IP這兩樣東西就可以看下面的小案例了!
下面就用實際的小案例來看看上網過程是如何完成的.
第一步:開啟瀏覽器,輸入網址。其實看上去是在輸入域名,但實際上DNS伺服器會自動的翻譯成一個目標網站的IP地址!
第二步:找到IP後,路由器還有一個自己的路由器的IP協議,自動的找到最優的一個路徑!
第三步:目標的路由器傳送請求給目標網站的伺服器
第四步:目標網站的伺服器返回資訊
第五步:其實在你開啟瀏覽器的時候,電腦已經給你配置了一個埠號,返回的資訊會通過這個埠號來給你資訊!
又會有很多朋友想要問:那平時說的內網和外網都是指什麼呢?
所謂的內網就是區域網。區域網可以獨立的封閉執行。外網就是廣域網。很多的區域網和獨立的伺服器組成。
這裡也有一個小知識就是在一個區域網內,一個IP必須是唯一的!就是說在這個獨立網路連線中,這個IP就是對應一個電腦。但是要是和別的區域網連線的話,別的區域網有可能有重名的IP號碼,這是很正常的,都是能用的!
下面看看怎麼用socket程式碼
import socket server=socket.socket() ip_port=("192.168.111.1",8000) server.bind(ip_port) server.listen() conn,addr=server.accept() while True: from_client_data=from_client_data.decode("utf8") print(from_client_data) if from_client_data=="bye" break sever_input=input("對方表示:") conn.send(server_input.encode("utf8")) if server_input=="bye" break conn.close() server.close()
那麼客戶端應該如何來進行連線呢?
import socket import time client = socket.socket() server_ip_port=("192.168.111.1",8001) client.connect(server_ip_port) while True: client_input=input("想要說") client.send(client_input.encode("utf8")) if client_input=="bye" break from_server_data = client.recv(1024) print(“服務端”,from_server_data.decode(utf8)) if from_server_data.decode("utf8")=="bye": break client.close()
記得一定要先啟動服務端,然後再用客戶端