前面介紹了創建TCP連接,請見

木頭人:Python 標準庫 socket 套接字網路通訊簡介與創建TCP連接?

zhuanlan.zhihu.com
圖標

一、UDP與TCP通訊區別

UDP 無連接,通訊不需要建立連接;它支持一對一,一對多,多對一和多對多的交互通信;TCP盡量保持數據交互,但不能保證交互可靠;UDP 實時信好,效率高,適用於對高速傳輸和實時性有較高的通信或廣播通信。

TCP 面向連接,點到點通訊,通訊前需要建立連接,也就是常說的3次握手;TCP傳送的數據,無差錯,不丟失,不重複,且按序到達,效率沒有UDP高,但它可靠;

UDP 佔用系統資源少,TCP佔用系統資源比較多。

由於網路的數據與穩定性的提升,網路的丟包率很低,在加上應用層重傳保證傳輸的可靠性,在越來越多的場景下優先考慮UDP。

二、創建UDP伺服器通訊端

UDP 不用建立連接,所以不像TCP一樣需要很多設置工作,伺服器端直接等待進來的連接就好了。

UDP服務端創建鏈接流程:

創建伺服器套接字(ss = socket())

綁定伺服器套接字(ss.bind())

伺服器無限循環(inf_loop:)

對話(接收與發送)(cs = ss.recvfrom()/ss.sendto())

關閉伺服器套接字(ss.close())(可選)

示例:創建一個能接收客戶的消息,在消息前加一個時間戳後返回的UDP伺服器。

udp_socket_server.py

from socket import *
from time import ctime

HOST =
PORT = 8080
BUFSIZ = 1024
ADDR = (HOST, PORT)

udpSerrverSocket=socket(AF_INET,SOCK_DGRAM) # 創建UDP連接
udpSerrverSocket.bind(ADDR) # 綁定伺服器地址

while True: # 伺服器無線循環
print(等待連接...)
data,addr=udpSerrverSocket.recvfrom(BUFSIZ) # 接受客戶的連接
udpSerrverSocket.sendto(bytes([%s] %s % (ctime(), data),encoding=utf-8), addr) # 發送UDP 數據
print( 連接地址:, addr)

udpSerrverSocket.close() # 關閉伺服器連接

三、創建UDP客戶機通訊端

客服端創建鏈接流程:

創建客戶套接字(ss = socket())

通訊循環(comm_loop:)

對話(接收與發送)(cs.sendto()/cs.recvfrom())

關閉客戶套接字(cs.close())

示例:與前面udp_socket_server.py 進行通訊

udp_socket_client.py

from socket import *

HOST = 127.0.0.1 # 伺服器連接地址
PORT = 8080 # 伺服器啟用埠
BUFSIZ = 1024 # 緩衝區大小
ADDR = (HOST, PORT)

udpCliendSocket = socket(AF_INET, SOCK_DGRAM)

while True:
data = bytes(input(> ), encoding="UTF-8")
if not data:
break
udpCliendSocket.sendto(data, ADDR)
data, ADDR = udpCliendSocket.recvfrom(BUFSIZ)
if not data:
break
print (data)

udpCliendSocket.close()

五、運行客戶端與伺服器程序

  1. 先運行伺服器端程序 (win系統 cmd 窗口命令 python socket_server.py )。
  2. 再運行客戶端程序 (win系統 重新開 cmd 窗口 命令 python socket_client.py )。
  3. 在客戶端程序輸入內容 Hi woodman 。

服務端輸出內容:

等待連接...

連接地址: (127.0.0.1, 51105)等待連接...

客戶端輸出內容:

b"[Mon Nov 12 09:52:19 2018] bHi woodman"

伺服器與客戶端通訊流程

  1. 伺服器啟動埠監聽,監聽埠數據報文。
  2. 當客戶端發送報文數據,(報文包含客戶端ip埠,伺服器ip埠,需發送的數據)
  3. 在客戶端接受服務的時候,伺服器又回去等待其它客戶端的數據報文。
  4. 伺服器對接收數據並進行處理,將返回數據封裝發送到客戶端。

推薦閱讀:

查看原文 >>
相關文章