出自《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