天天看點

Python 技術篇-socket套接字實作伺服器用戶端消息傳遞,UDP實作

上一篇:Python 技術篇-socket套接字實作兩個視窗間消息傳遞,TCP實作

本篇介紹用 UDP 來實作。

socket 套接字實作伺服器用戶端消息傳遞有 UDP 和 TCP 兩種形式。他們最主要的差別是:TCP 需要建立用戶端與伺服器的連接配接,UDP 不需要

建立 UDP 連接配接的 socket 對象:

socket(AF_INET, SOCK_DGRAM)

UDP 接收資料:

recvfrom(buf)

,傳回值是用戶端傳的資料和用戶端的位址,參數 buf 是緩沖區大小,比如 8 的話相當于 2 個中文,8 個英文或數字,一般設定 1024。

UDP 發送資料:

sendto(data, addr)

,data 是位元組 bytes 類型的資料,addr 是形如

(host, port)

端口号加位址的元組類型資料。

伺服器端代碼:

from socket import *

host = ""   # ip,伺服器空ip代表本地;
port = 7777   # 端口号;
addr = (host, port)

Socket_UDP = socket(AF_INET, SOCK_DGRAM)   # 建立socket對象;
Socket_UDP.bind(addr)   # 伺服器用bind綁定本地,也算是伺服器的辨別;

print("Waitting...")
while True:
    data, addr = Socket_UDP.recvfrom(128)   # 緩沖區大小可以設定大一點
    data = str(data, encoding = 'utf-8')   # 将接收的位元組類型資料轉化為字元串類型;
    print("來自" + str(addr) + "發來的消息: " + data)
    
    if data == "exit":
        break
        
Socket_UDP.close()   # 關閉socket對象;           

複制

用戶端代碼:

from socket import *

host = "127.0.0.1" # 伺服器的位址,因為伺服器也在本地,是以填本地位址了
port = 7777 # 端口号要與伺服器一緻
addr = (host, port)

Socket_UDP = socket(AF_INET, SOCK_DGRAM)

while True:
    data = input("向伺服器發送消息: ")
    data = bytes(data, encoding = 'utf-8') # 因為input傳回的是字元串類型的資料,data需要位元組類型的資料
    Socket_UDP.sendto(data, addr) 
    
    if data == "exit":
        break
        
Socket_UDP.close()           

複制

伺服器視窗截圖:

Python 技術篇-socket套接字實作伺服器用戶端消息傳遞,UDP實作

用戶端視窗截圖:

Python 技術篇-socket套接字實作伺服器用戶端消息傳遞,UDP實作