使用 UDP 封包傳送訊息

2020-10-25 11:00:43

使用 UDP 封包傳送短的文字訊息實現是很簡單的並且提供可一個非常輕量級的訊息傳遞通道。但是這種模式有很大的缺陷,就是不保證的資料的可靠性,有可能會存在丟包的情況,甚至嚴重的情況就是伺服器不可用的時候,會完全丟失你的訊息。不過這個任務會在有些情況下十分有作用:

你不關心訊息是否丟失;
你不想要終止程式只是因為訊息無法傳遞;

server.py
import socket
port = 8081
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind(("", port))
print "waiting on port:", port
while 1:
   data, addr = s.recvfrom(1024)
   print data

---

client.py
import socket
port = 8081
host = "localhost"
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind(("", 0))
s.sendto("Holy Guido! It's working.", (host, port))

還有一個提醒事項,不要用上面的程式傳送大量的封包,尤其是在 Windows 上。要是想要傳送大的訊息的話,你可以這樣做:

BUFSIZE = 1024
while msg:
    s.sendto(msg[:BUFSIZE], (host, port))
    msg = msg[BUFSIZE:]