Python子產品中有一個socket子產品,用來提供網絡底層接口,這裡主要通過程式來實作一下UDP是如何完成資料發送與接收。
UDP(UserDatagram Protocol)使用者資料報協定,不過與TCP不一樣,UDP使用底層網際網路協定傳送封包,提供不可靠的、無連接配接的資料包傳輸服務。UDP無須進行流量控制和差錯控制,是以實作起來比TC簡單。
一、UDP伺服器的實作
功能:等待用戶端的連接配接,如果用戶端連接配接成功,向用戶端發送資訊,為了友善觀察,用了一個while循環。
說明:在網絡傳輸發送接收資料是bytes進行,而不行string,是以我們發送的時候需要編碼encode,接收的時候需要解碼decode。
import socket,time
#第二參數:socket.SOCK_DGRAM代表UDP
s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
#綁定伺服器主機和端口,如果主機為空,表示任意主機。
s.bind(("",8888))
k=0
print("伺服器準備就緒,等待用戶端連接配接...")
while 1:
k=k+1
data,address=s.recvfrom(1024) #接收用戶端發送的資料
print("來自UDP Client 的發送資訊:",repr(data.decode()))
resp="UDP Server:"+str(k)
s.sendto(resp.encode(),address) #發送資料給用戶端
time.sleep(1)
#print(resp)
#resp=""
二、UDP用戶端的實作
為了友善模拟觀察,用戶端也用了一個while循環,而生成一個随機數用來發送到服務端,同時也接收服務端發來的資料。
import socket
import random
s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
HOST=input("server IP:")
PORT=int(input("port:"))
while 1:
msg="UDP 伺服器你好,……" +str(random.randint(0,1000))
s.sendto(msg.encode(),(HOST,PORT)) #發送資料給伺服器端
data,address=s.recvfrom(1024) #接收伺服器端發送的資料
print("來自UDP Server 的回複:",repr(data.decode()))
三、運作示範
1、服務端程式是通過遠端家裡的電腦上運作的
運作服務端程式
2、用戶端程式是在辦公電腦上運作的,輸入伺服器IP和端口
運作用戶端程式
3、伺服器端和客戶發送和接收資料情況
服務端發送和接收資料
用戶端發送和接收資料
注:伺服器和用戶端也可同時運作在一台電腦上,文中把伺服器和用戶端實體分開隻是增加模拟示範真實效果。