實作簡單的udp請求服務模式
udp 是一種簡單傳輸協定,實作簡單,占用系統資源少
運作結果
用戶端
服務端
服務端代碼
# _*_ coding: utf-8 _*_
import time
from socket import *
'''建立簡單的udp服務端'''
# 建立套接字
soc = socket(AF_INET, SOCK_DGRAM)
# 設定本地位址
local_addr = ("", 50000)
# 綁定本地位址
soc.bind(local_addr)
# 進入等待服務模式
while True:
# 一次接受的最大位元組數為3000
rec_addr, rec_txt = soc.recvfrom(3000)
# 列印接收的結果
print("%s>>%s"%(rec_addr, rec_txt))
# 為避免cpu占用過高,使用延時政策
time.sleep(0.5)
用戶端代碼
# _*_ coding: utf-8 _*_
from socket import *
import time
# 設定服務端和用戶端ip和端口資訊
local_addr = ("", 51000)
dest_addr = ("", 50000)
while True:
# 建立端口
soc = socket(AF_INET, SOCK_DGRAM)
# 綁定端口
soc.bind(local_addr)
mes = input("請輸入需要發送的資訊:")
# 發送套接字
soc.sendto(mes.encode("utf-8"), dest_addr)
# 延時政策
time.sleep(0.1)
# 關閉套接字
soc.close()
小結
向服務端發送消息5個要點:
- 用戶端ip
- 用戶端端口
- 服務端ip
- 服務端端口
- 需要發送的資訊
容易出錯的點:
- 使用sendto或recvfrom函數的時候,接收到的第一個參數是消息第二個參數是ip和端口資訊
- window decode參數為gbk(國标碼,windows的編碼問題一直是個問題 -_- )
編寫技巧
- 先把5要點(用戶端ip, 用戶端端口, 服務端ip, 服務端端口, 需要發送的消息)寫好,再建立套接字
- 快速建立udp套接字寫法:
from socket import *
# 建立udp套接字,命名為soc
soc = socket(AF_INET, SOCK_DGRSM)