1. 程式人生 > >Python學習之旅(三十四)

Python學習之旅(三十四)

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

指定了這個Socket的型別是UDP

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!