出自《Python核心編程》
UDP不同於TCP:由於是無連接的,所有服務器不需要listen(夏娃不聽對面亞當的呼喊)
所以也不會用accept()返回客戶端連接給下屬去處理
創建一個UDP服務器
#-*- coding:utf-8 -*-
from socket import *
from time import ctime
HOST = 'localhost'
PORT = 20000
ADDR = (HOST, PORT)
BUFSIZ = 1024
udpSerSock = socket(AF_INET, SOCK_DGRAM)
udpSerSock.bind(ADDR)
while True:
data, addr = udpSerSock.recvfrom(BUFSIZ)
if not data:
break
udpSerSock.sendto("[%s]%s" % (ctime(), data), addr) #注意,因爲沒建立連接,因此sendto()裏都要有addr參數,下面的客戶端同樣要加addr
創建一個UDP客戶端
#-*- coding:utf-8 -*-
from socket import *
HOST = 'localhost'
PORT = 20000
ADDR = (HOST, PORT)
BUFSIZ = 1024
udpCliSock = socket(AF_INET, SOCK_DGRAM)
while True:
data = raw_input('>>>')
if not data:
break
udpCliSock.sendto(data, ADDR) #不連接,直接將data朝ADDR扔過去
data = udpCliSock.recvfrom(BUFSIZ)
if not data:
break
print data
udpCliSock.close()
注意點:
- UDP是無連接的,因此不listen(),不accept()
- recvfrom(), sendto(data, addr)。 sendto()裏第二個參數爲addr