第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
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要统计UDP丢包,可以使用Wireshark进行抓包并分析。首先,打开Wireshark并选择需要进行抓包的网络接口。然后,过滤出UDP类型的数据包,可以使用过滤表达式"udp"或者"udp.port==是你要统计的UDP端口号。 在抓包过程中,Wireshark将会显示所有通过该网络接口的UDP数据包。你可以使用Wireshark的统计功能来计算丢包。选择“统计”菜单下的“流量统计”选项,在左侧面板中选择“丢失数据包”选项。这将显示出丢包数量和丢包。 请注意,Wireshark只能统计在抓包期间捕获到的数据包,因此为了准确计算丢包,应尽量保证抓包时间足够长,并且在测试过程中尽量避免其他网络状况干扰。同时,还需要确保Wireshark正确配置并捕获了所有的UDP数据包。 引用<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [基于UDP丢包统计程序设计](https://blog.csdn.net/sheziqiong/article/details/125600883)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [linux系统内核UDP丢包原因分析](https://blog.csdn.net/weixin_33565515/article/details/113688432)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值