1) 创建UDP服务器
创建UDP服务器的伪代码:
ss = socket() # create server socket(创建服务器套接字)
ss.bind() # bind server socket(绑定服务器套接字)
inf_loop: # server infinite loop(服务器循环)
cs = ss.recvfrom()/ss.sendto()# dialog(receive/send)(进行对话(接收/发送))
ss.close() # close server socket(关闭服务器套接字)
2) 创建UDP客户端
创建UDP客户端的伪代码:
cs = socket() # create client socket( 创建客户端套接字)
comm_loop: # communication loop(通信循环)
cs.sendto()/cs.recvfrom() # dialog(send/receive)(进行对话(发送/接收))
cs.close() # close client socket(关闭客户端套接字)
3) 实际应用
tsUserv.py:
#!/usr/bin/env python
from socket import *
from time import ctime
HOST = ''
PORT = 21567
BUFSIZ = 1024
ADDR = (HOST, PORT)
# 创建客户端套接字,SOCK_DGRAM表示使用UDP协议进行通信
udpSerSock =socket(AF_INET, SOCK_DGRAM)
# 绑定服务器套接字,因为是无连接,所以不需要listen,只是被动等待数据到来
udpSerSock.bind(ADDR)
# 服务器循环
while True:
print('-------正在等待消息-----------')
# 进行对话:接收消息。不产生一个新的socket,因为UDP是无连接的
data,addr = udpSerSock.recvfrom(BUFSIZ)
# 把bytes转换成utf-8
data = data.decode('utf-8')
# 进行对话:发送消息。需要写addr,因为是无连接
udpSerSock.sendto(('[%s] %s'%(ctime(),data)).encode('utf-8'),addr)
print('...received from and returned to:',addr)
udpSerSock.close()
tsUclnt.py:
#!/usr/bin/env python
from socket import*
HOST='localhost'
PORT=21567
BUFSIZ=1024
ADDR=(HOST,PORT)
# 创建客户端套接字,SOCK_DGRAM表示使用UDP协议进行通信
udpCliSock=socket(AF_INET,SOCK_DGRAM)
# 通信循环
while True:
data=input('> ').encode('utf8')
if not data:
break;
# 进行对话:发送消息
udpCliSock.sendto(data,ADDR)
# 进行对话,接收消息
data,addr = udpCliSock.recvfrom(BUFSIZ)
if not data:
break;
print(data.decode('utf8'))
udpCliSock.close()