Python學習之旅(三十四)
阿新 • • 發佈:2018-12-15
Python基礎知識(33):網路程式設計(Ⅱ)
UDP程式設計
相對TCP,UDP則是面向無連線的協議
使用UDP協議時,不需要建立連線,只需要知道對方的IP地址和埠號,就可以直接發資料包
雖然用UDP傳輸資料不可靠,但它的優點是和TCP比,速度快,對於不要求可靠到達的資料,就可以使用UDP協議
服務端
1、建立Socket
#建立基於UDP的socket連線 import socket s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) #繫結埠 s.bind(('127.0.0.1', 9999))
SOCK_DGRAM
2、接收來自任何客戶端的資料
print('Bind UDP on 9999...') while True: #接收資料 data, addr = s.recvfrom(1024) print('Received from %s:%s.' % addr) s.sendto(b'Hello, %s!' % data, addr)
繫結埠和TCP一樣,但是不需要呼叫listen()
方法
recvfrom()
方法返回資料和客戶端的地址與埠,這樣,伺服器收到資料後,直接呼叫sendto()
就可以把資料用UDP發給客戶端
客戶端
建立基於UDP的Socket,直接通過sendto()
給伺服器發資料
import socket s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) for data in [b'Alice', b'Bob', b'Jack']: #傳送資料 s.sendto(data, ('127.0.0.1', 9999)) #接收資料 print(s.recv(1024).decode('utf-8')) s.close()
從伺服器接收資料仍然呼叫recv()
方法
執行udp_server.py和udp_client.py
udp_server.py結果: Bind UDP on 9999... Received from 127.0.0.1:60136. Received from 127.0.0.1:60136. Received from 127.0.0.1:60136. udp_client.py結果: Hello, Alice! Hello, Bob! Hello, Jack!