python進階---Python中的socket編程(一)
初識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編程(一)