1、Python網絡編程——客戶端/服務器架構編程
一、服務器:服務器就是一系列硬件和軟件,爲一個或多個客戶端提供所須要的服務。存在的目的就是等待客戶端的請求,並響應他它們,而後等待更多請求。服務器
二、客戶端:客戶端因特定的請求聯繫服務器,併發送必要的數據,而後等待服務器的迴應,即最後完成請求或給出故障的緣由。網絡
三、工做過程圖示: 架構
四、數據傳輸模式併發
網絡編程通常有兩種數據傳輸模式:即兩種協議 TCP 和 UDP socket
4.一、TCP方式的特色:spa
(1)校驗碼(2)接收方反饋(3)信息包附帶序號server
4.二、UDP方式的特色:對象
(1)不創建鏈接:不須要花費時間創建鏈接和關閉鏈接get
(2)數據傳輸快:偶爾會丟失一兩個消息
(3)限制一個消息包不超過 64KB 的數據
兩種協議的對比:UDP 不創建鏈接,只保證數據的完整性,數據傳輸快,可是不保證數據真的被接收到,也不保證數據僅接收一次,同時也不保證數據的順序。
2、Python網絡編程模塊——套接字 Socket 模塊
一、建立套接字
語法格式爲 sock = socket.socket(socket_family,socket_type,property=0)
其中 socket_family 指定是 socket.AF_INET 地址類型IPV4或IPV6 默認爲 IPV4
socket_type 指的是 socket.SOCK_STREAM 或 socket.SOCK_DGRAM 僅可用於Unix系統通訊
property=0 該參數默認爲0,一般省略不寫
二、建立 TCP 套接字
t = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
三、建立 UDP 套接字
u = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
3、TCP模式——服務器 server——套接字對象的方法
一、s.bind(address):將地址(服務端IP地址、端口)綁定到套接字上
若是IP地址爲 0.0.0.0 表明本機的任意一個IP 端口 0--1024 爲系統保留
address 必須是元組 即address = ('192.168.1.188',888)
1.一、綁定的兩種寫法
① s.bind(('192.168.1.188',888))
② address = ('192.168.1.188',888)
s.bind(address)
二、s.listen(backlog) 設置並啓動TCP監聽,其中 backlog 表明能夠同時接受多少個socket鏈接
三、s.accept() 被動接受TCP客戶端鏈接,一直等待直到鏈接到達。
4、TCP模式——客戶端 client——套接字對象的方法
一、主動發起TCP服務器鏈接 c.connect()
二、異常時,返回錯誤碼 c.connect_ex()
5、TCP模式——通用(適用於:服務端/客戶端)——套接字對象的方法
一、 發送數據
發送TCP消息(可能未將指定內容所有發送過去) s.send()
發送完整的TCP消息(推薦使用) s.sendall()
二、接收 TCP 數據 s.recv(bufsize)
bufsize 指定最多接收的數據量,可使用1024 2048等
若是不知道接收的數據量有多少,通常經過循環實現。
三、關閉套接字 s.close()
四、當前套接字地址 s.getsocketname()
五、設置套接字的阻塞或者非阻塞模式 s.setblocking()
六、設置阻塞套接字操做的超時時間 s.settimeout(timeout) timeout爲float類型,單位爲秒
七、獲取阻塞套接字操做的超時時間 s.gettimeout(timeout) timeout爲float類型,單位爲秒
6、UDP模式
一、建立 UDP 套接字
u = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
二、接收 UDP 消息 s.recvfrom()
三、發送 UDP 消息 s.sendto()