標籤:架構 設計 機器 控制 int 網路編程 pen 設計模式 位置
一. 楔子
兩個程式之間想要傳遞一個資料,需要用到網路通訊.
二. 軟體開發的架構:
第一種: 應用類: qq,,網盤,優酷 這一類是屬於需要安裝的案頭應用.
第二種: web類: 百度,知乎,部落格園,等使用瀏覽器訪問就可以直接使用的應用.
這些應用的本質其實就是兩個程式之間的通訊,而這兩個分類又對應了兩個軟體開發的架構.
1.C/S 架構
C/S即: client與server,中文意思: 用戶端與伺服器端架構,這種架構也是從使用者層面,(也是物理層面劃分的).
2.B/S 架構
B/S即:browser和server,中文意思:瀏覽器端與伺服器端架構,這種架構是從使用者層面來劃分.
browser瀏覽器,其實也是一種client用戶端,只是這個用戶端不需要大家去安裝什麼應用程式,只是需要通過http請求伺服器端相關的資源(網頁資源),用戶端browser瀏覽器就能進行增刪改查.
三. 網路基礎.
1. osi七層模型.
2.socket概念
socket是應用程式層與TCP/IP協議族通訊的中間軟體抽象層,他是一組介面.在設計模式中,socket其實就是一個門面模式,它把複雜的TCP/IP協議族隱藏在socket介面後面,對使用者來說,一組簡單的介面就是全部,讓socket去組織資料,以符合指定的協議.
其實站在你的角度上看,socket就是一個模組.我們通過調用模組中實現的方法
建立兩個進程之間的串連和通訊.也有人將socket說成ip+port,因為ip是用來標識互連網中的一台主機的位置,
而port是用來標識這台機器上的一個應用程式,
所以我們只要確立了ip和port就能找到一個應用程式,並且使用socket模組來與之通訊.
3. tcp協議和udp協議
TCP 可靠的.連線導向的協議,傳輸效率低全雙工系統通訊(發送緩衝,接收緩衝),面向位元組流.
使用TCP的應用: web瀏覽器;電子郵件;檔案傳輸程式.
UDP 不可靠的,不需連線的服務,傳輸效率高(發送錢延遲小),一對一,一對多,多對多,面向報文,盡最大努力服務,無擁塞控制,使用UDP的應用: 網域名稱系統(DNS); 視頻流,IP語音.
四.通訊端(socket)初使用.
1. 基於TCP協議的socket
tcp是基於串連的,必須先啟動伺服器,然後再啟動用戶端去串連伺服器.
server端
import socketsk = socket.socket()sk.bind((‘127.0.0.1‘,8898)) #把地址綁定到通訊端sk.listen() #監聽連結conn,addr = sk.accept() #接受用戶端連結ret = conn.recv(1024) #接收用戶端資訊print(ret) #列印用戶端資訊conn.send(b‘hi‘) #向用戶端發送資訊conn.close() #關閉用戶端通訊端sk.close() #關閉伺服器通訊端(可選)
View Code
client端
import socketsk = socket.socket() # 建立客戶通訊端sk.connect((‘127.0.0.1‘,8000)) # 嘗試串連伺服器sk.send(b‘hello‘)ret = sk.recv(1024) # 對話(發送/接收)print(ret)sk.close() # 關閉客戶通訊端
View Code
問題: 重啟服務端時可能會遇到,
解決方案:
# 加入一條socket配置,重用ip和連接埠.import socketfrom socket import SOL_SOCKET,SO_REUSEADDRsk = socket.socket()sk.setsockopt(SQL_SOCKET,SO_REUSEADDR,1) # 就是它,在bind前加.sk.bind(‘127.0.0.1‘,8000) #把地址綁定到通訊端sk.listen() #監聽連結conn,addr = sk.accept() #接收用戶端連結ret = conn.recv(1024) #接收用戶端資訊print(ret) # 列印用戶端資訊conn.send(b‘hi‘) # 向用戶端發送資訊conn.close() # 關閉用戶端通訊端sk.close() # 關閉伺服器通訊端(可選)
python之路-網路編程