第2关:UDP 计算丢包率

任务描述

本关任务:完成一个客户端程序,向服务器端发出请求,传输数据,并设置超时丢包,服务器会进行相应的反馈,我们需要计算来自服务器的数据包丢失率。

相关知识

为了完成本关任务,你需要回顾上一关卡的具体内容,包括:

  1. 创建socket对象;
  2. 发送 UDP 数据;
  3. 接收 UDP 数据;
  4. 设置超时。

如果已经忘记了相关的内容,请返回第一关进行复习,打好基础。如果你已经掌握了第一关的知识,那么这关将会变得轻松。

除此之外,你需要知道如何计算丢包率。

丢包率的计算

所谓网络中的丢包率是数据包丢失数量与所传数据包总数的比值,即:

 
  1. 丢包率 = [(输入报文数量-输出报文数量) / 输入报文数量] * 100%
编程要求

本实训使用python3进行编程,客户端将采用 UDP 方式连接服务器,你需要在右侧编辑器补充代码,完成客户器的功能,具体操作如下:

  1. 由于评测系统的服务器端文件和客户端文件位于同一台主机,我们可以使用localhost表示服务器端地址。

  2. 端口号为56789

  3. 设置超时时长为1秒。

  4. 客户端发送的内容为Ping x timex表示第几次发送。(你不需要将发送内容输出)

  5. 接收的内容为Receive x: from y,你需要将其输出,其中x表示收到第几次的报文,y为来自服务器的消息(并且是解码后的字符串类型的消息),具体参考预期输出。

  6. 发生丢包时要有反馈信息,并且需要输出,内容为The x package is lostx为第几次发生数据包报丢失,x初始值为0,表示没有出现任何丢包情况,每出现一次丢失数据包,x值就会增加一,具体参考预期输出。

  7. 最后你需要计算丢包率并将其输出,输出格式为Packet loss rate: x,其中x为浮点数,表示丢包率,我们需要保留其小数点后两位。

测试说明

平台会对你编写的代码进行测试:

预期输出: The 1 package is lost Receive 2: Hello, I am here Receive 3: Hello, I am here The 4 package is lost Receive 5: Hello, I am here Receive 6: Hello, I am here Receive 7: Hello, I am here Receive 8: Hello, I am here The 9 package is lost Receive 10: Hello, I am here Packet loss rate: 0.30


开始你的任务吧,祝你成功!

AC代码

from socket import *

#********* Begin *********#
# 指定服务器地址和端口
addressPort = ("localhost", 56789)
#********* End *********#

#********* Begin *********#
# 创建UDP套接字
s = socket(AF_INET, SOCK_DGRAM)
# s.bind(('', 56789)) 
#********* End *********#

#********* Begin *********#
# 设置套接字超时值1秒
s.settimeout(1)
#********* End *********#

i = 1
count = 0 # 可以用来记录丢包的个数
while i <=10:
    try:
        # ********* Begin *********#
        # 生成数据报,编码为bytes,并发送给服务器
        data = bytes("Ping " + str(i) + " time", encoding='utf-8')
        s.sendto(data, addressPort)
        # ********* End *********#

        # ********* Begin *********#
        # 从服务器接收信息,同时也能得到来自服务器的数据,需要输出该数据,具体见编程要求

        received_data, address = s.recvfrom(1024)
        print("Receive " + str(i) + ": " + received_data.decode())
        # ********* End *********#

    except Exception as e:

        # ********* Begin *********#
        # 输出超时丢包的反馈信息。记录丢包的个数,便于后面计算丢包率

        count += 1
        print("The " + str(i) + " package is lost")
        # ********* End *********#

    i = i + 1

# ********* Begin *********#
# 计算并输出丢包率
packet_loss_rate = (count / 10) 
print("Packet loss rate: {:.2f}".format(packet_loss_rate))
# ********* End *********#

#********* Begin *********#
# 关闭该UDP套接字
s.close()
#********* End *********#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值