# UDPPingerServer.py from socket import*########## Begin ########### 创建UDP套接字
serverSocket = socket(AF_INET, SOCK_DGRAM)# 绑定本机IP地址和端口号
serverSocket.bind(('',12000))########## End ##########print( serverSocket)
第2关:接收并转发消息
from socket import*# 创建UDP套接字
serverSocket = socket(AF_INET, SOCK_DGRAM)# 绑定本机IP地址和端口号
serverSocket.bind(('',12000))########## Begin ########### 接收客户端消息
message, address = serverSocket.recvfrom(1024)# 将数据包消息转换为大写
message = message.upper()#将消息传回给客户端
serverSocket.sendto(message,address)########## End ##########
第3关:服务端模拟丢包事件
from socket import*import random
# 创建UDP套接字
serverSocket = socket(AF_INET, SOCK_DGRAM)# 绑定本机IP地址和端口号
serverSocket.bind(('',12000))
num=0whileTrue:# 接收客户端消息
message, address = serverSocket.recvfrom(1024)# 将数据包消息转换为大写
message = message.upper()
num=num+1if num>=8:break########## Begin ##########if num %3==1:continue########## End ###########将消息传回给客户端
serverSocket.sendto(message, address)
第4关:客户端创建UDP套接字
from socket import*########## Begin ##########
clientSocket = socket(AF_INET, SOCK_DGRAM)# 创建UDP套接字,使用IPv4协议# 设置套接字超时值1秒
clientSocket.settimeout(1)########## End ##########print(clientSocket)print(clientSocket.gettimeout())
第5关:客户端向服务器发送消息并接收消息
from socket import*import time
serverName ='127.0.0.1'# 服务器地址,本例中使用本机地址
serverPort =12000# 服务器指定的端口
clientSocket = socket(AF_INET, SOCK_DGRAM)# 创建UDP套接字,使用IPv4协议
clientSocket.settimeout(1)# 设置套接字超时值1秒for i inrange(0,9):
sendTime = time.time()
message =('Ping %d %s'%(i+1, sendTime)).encode()# 生成数据报,编码为bytes以便发送try:########## Begin ########### 将信息发送到服务器
clientSocket.sendto(message,(serverName,serverPort))# 从服务器接收信息,同时也能得到服务器地址
modifiedMessage, serverAddress = clientSocket.recvfrom(1024)########## End ##########
rtt = time.time()- sendTime # 计算往返时间print('Sequence %d: Reply from %s RTT = %.3fs'%(i+1, serverName, rtt))# 显示信息except Exception as e:print('Sequence %d: Request timed out.'%(i+1))
clientSocket.close()# 关闭套接字