UDP 服务器不是面向连接的,所以不用像 TCP 服务器那样做那么多设置工作。事实上,并不用设置什么东西,直接等待进来的连接就好了.
ss = socket() # 创建一个服务器套接字
ss.bind() # 绑定服务器套接字
inf_loop: # 服务器无限循环
cs = ss.recvfrom()/ss.sendto() # 对话(接收与发送)
ss.close() # 关闭服务器套接字
跟tcp一样,分别编写一个服务器和客户端文件:
1 # -*- coding: utf-8 -*- 2 #!/usr/bin/env python 3 4 from socket import * 5 from time import ctime 6 7 HOST = '' 8 PORT = 21567 9 BUFSIZ = 1024 10 ADDR = (HOST,PORT) 11 12 udpSerSOCK = socket(AF_INET,SOCK_DGRAM) 13 udpSerSOCK.bind(ADDR) 14 15 while True: 16 print('waiting for message...') 17 data,addr = udpSerSOCK.recvfrom(BUFSIZ) 18 udpSerSOCK.sendto('[%s]%s'%(ctime(),data),addr) 19 print('...reveiver from and return to :',addr) 20 21 udpSerSOCK.close()
上面是服务器文件,下面编写客户端:
1 # -*- coding: utf-8 -*- 2 #!/usr/bin/env python 3 4 from socket import * 5 6 HOST = 'localhost' 7 PORT = 21567 8 BUFSIZ = 1024 9 ADDR = (HOST,PORT) 10 11 udpCliSock = socket(AF_INET,SOCK_DGRAM) 12 13 while True: 14 data = raw_input('>') 15 if not data: 16 break 17 udpCliSock.sendto(data,ADDR) 18 data,ADDR = udpCliSock.recvfrom(BUFSIZ) 19 if not data: 20 break 21 print (data) 22 23 udpCliSock.close()
第一次运行成功,第二次运行报出一个错误,这次是直接使用python2.75
Errno 9: Bad file descriptor
浙公网安备 33010602011771号