1.服务器端
UDP服务器建立与TCP相类似,具体比较如下:
补充下,第四步:不必使用listen还有accept函数。
具体代码如下:(设置socket选项省略)
import socket from time import ctime HOST='' PORT=21004 BUFSIZE=1024 udpSerSock=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) #建立socket udpSerSock.bind((HOST,PORT)) #将socket与端口绑定,这个端口是连接客户端与服务器 while True: print 'waiting for message...' data, addr = udpSerSock.recvfrom(BUFSIZE) udpSerSock.sendto('[%s] %s'%(ctime(),data),addr) print '...received from and returned to:',addr print ctime(),' ',data udpSerSock.close()
2.客户端
1)SOCK_DGRAM
2)因为UDP是无连接的,没有使用connect函数,我们无法知道数据是否已经发送结束。
import socket HOST ='localhost' PORT = 21004 BUFSIZE =1024 udpCliSock =socket.socket(socket.AF_INET,socket.SOCK_DGRAM) # 建立UDP socket while True: data=raw_input('Enter a string that you want to send: ') if not data: break udpCliSock.sendto(data,(HOST,PORT)) # 发送到服务器端口 data,(HOST,PORT)=udpCliSock.recvfrom(BUFSIZE) # 接收服务器数据 if not data: break print data udpCliScok.close()
结果:
客户端
服务器端:
由上图再结合TCP结果,可以发现每次客户端发送数据给服务器后,(客户端会进行检查吗?),服务器只管收到数据,并返回给客户端,不管对方接收到了没有,都只进行接收下一段数据。(waiting for message…)
参考:http://www.cnblogs.com/xiaowuyi/archive/2012/08/06/2625509.html