UDP Ping程序实现--第3关:服务端模拟丢包事件
2023-12-24 14:29:40
?创作不易,还希望各位大佬支持一下?
👍 点赞,你的认可是我创作的动力!?
?? 收藏,你的青睐是我努力的方向!
?? 评论,你的意见是我进步的财富!?
?
任务描述
本关任务:在完整的服务器程序框架中模拟丢包事件发生。
相关知识
为了完成本关任务,你需要掌握:
- 完整服务器程序框架;
- 模拟对序号模 3 为 1 的消息丢包。
完整UDP Ping服务程序框架
完整的服务器程序一般都处于后台服务状态,通过不断循环等待客户端发送 Ping 消息,经过简单处理后,将消息发给相应的客户端。 在本实验中,为了避免大量资源的消耗,设置了一个接收消息计数器,当接收到消息超过设定值后,服务程序就退出(break)循环。
模拟丢包事件
在实际 UDP 网络通信中,丢包事件是很小概率随机发生的。这里为了模拟及便于评测,采用对接收到的消息计数器进行模运算,当模 3 的取值为 1 时,就不回传消息,返回接收下一条消息。
示例:
if number % 3 == 1:
continue
编程要求
根据提示,在右侧编辑器代码的Begin
与End
之间补充代码,实现对消息计数器模 3 为 1 的消息丢包。
测试说明
平台会对你编写的代码进行测试:
预期输出:
Sequence 1: Request timed out
Sequence 2: Reply from 127.0.0.1 RTT = 0.000s
Sequence 3: Reply from 127.0.0.1 RTT = 0.000s
Sequence 4: Request timed out
Sequence 5: Reply from 127.0.0.1 RTT = 0.000s
Sequence 6: Reply from 127.0.0.1 RTT = 0.000s
Sequence 7: Request timed out
Sequence 8: Request timed out
Sequence 9: Request timed out
?程序示例
from socket import *
import random
# 创建UDP套接字
serverSocket = socket(AF_INET, SOCK_DGRAM)
# 绑定本机IP地址和端口号
serverSocket.bind(('', 12000))
num=0
while True:
# 接收客户端消息
message, address = serverSocket.recvfrom(1024)
# 将数据包消息转换为大写
message = message.upper()
num=num+1
if num>=8:
break
########## Begin ##########
# 对消息计数器模 3 为 1 的消息丢包
if num % 3 == 1:
continue
########## End ##########
#将消息传回给客户端
serverSocket.sendto(message, address)
?创作不易,还希望各位大佬支持一下?
👍 点赞,你的认可是我创作的动力!?
?? 收藏,你的青睐是我努力的方向!
?? 评论,你的意见是我进步的财富!?
文章来源:https://blog.csdn.net/qq_66047907/article/details/135180859
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!