天天看點

49.Python——UDP的伺服器與用戶端的使用

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、服務端程式是通過遠端家裡的電腦上運作的

49.Python——UDP的伺服器與用戶端的使用

運作服務端程式

2、用戶端程式是在辦公電腦上運作的,輸入伺服器IP和端口

49.Python——UDP的伺服器與用戶端的使用

運作用戶端程式

3、伺服器端和客戶發送和接收資料情況

49.Python——UDP的伺服器與用戶端的使用

服務端發送和接收資料

49.Python——UDP的伺服器與用戶端的使用

用戶端發送和接收資料

注:伺服器和用戶端也可同時運作在一台電腦上,文中把伺服器和用戶端實體分開隻是增加模拟示範真實效果。