1. 程式人生 > >網路程式設計一定要看過的socket大山

網路程式設計一定要看過的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()

 

記得一定要先啟動服務端,然後再用客戶端