angrykola

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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

 

 

 

posted on 2013-11-26 12:14  kolaman  阅读(310)  评论(0)    收藏  举报