1. 程式人生 > >python進階---Python中的socket編程(一)

python進階---Python中的socket編程(一)

bin prot repr loop lang ket 應用 ndt 接收

初識socket編程

一、前言

socket基於C\S架構(客戶端\服務端)的編程模型,在Python中是以socket模塊存在的。

Socket是應用層與TCP/IP協議族通信的中間軟件抽象層,它是一組接口。在設計模式中,Socket其實就是一個門面模式,它把復雜的TCP/IP協議族隱藏在Socket接口後面,對用戶來說,一組簡單的接口就是全部,讓Socket去組織數據,以符合指定的協議。

所以,我們無需深入理解tcp/udp協議,socket已經為我們封裝好了,我們只需要遵循socket的規定去編程,寫出的程序自然就是遵循tcp/udp標準的。

二、socket類型

套接字格式:

socket(family,type[,protocal]) 使用給定的地址族、套接字類型、協議編號(默認為0)來創建套接字。

技術分享

二、socket函數

註意點:

1)TCP發送數據時,已建立好TCP連接,所以不需要指定地址。UDP是面向無連接的,每次發送要指定是發給誰。

2)服務端與客戶端不能直接發送列表,元組,字典。需要字符串化repr(data)

技術分享

技術分享

3、socket編程思路

TCP服務端:

1 創建套接字,綁定套接字到本地IP與端口

# socket.socket(socket.AF_INET,socket.SOCK_STREAM) , s.bind()

2 開始監聽連接 #s.listen()

3 進入循環,不斷接受客戶端的連接請求 #s.accept()

4 然後接收傳來的數據,並發送給對方數據 #s.recv() , s.sendall()

5 傳輸完畢後,關閉套接字 #s.close()

TCP客戶端:

1 創建套接字,連接遠端地址

# socket.socket(socket.AF_INET,socket.SOCK_STREAM) , s.connect()

2 連接後發送數據和接收數據 # s.sendall(), s.recv()

3 傳輸完畢後,關閉套接字 #s.close()

UDP服務端

ss = socket(socket.AF_INET,socket.SOCK_DGRAM)   #創建一個服務器的套接字
ss.bind()       #綁定服務器套接字
inf_loop:       #服務器無限循環
     cs = ss.recvfrom()/ss.sendto() # 對話(接收與發送)
 ss.close()                         # 關閉服務器套接字

UDP客戶端

cs = socket(socket.AF_INET,socket.SOCK_DGRAM)   # 創建客戶套接字
comm_loop:      # 通訊循環
    cs.sendto()/cs.recvfrom()   # 對話(發送/接收)
cs.close()                      # 關閉客戶套接字

python進階---Python中的socket編程(一)