UDP Ping程序实现--第2关:接收并转发消息

news/2024/5/18 13:01:23 标签: udp, 网络协议, 网络

✨创作不易,还希望各位大佬支持一下 

👍 点赞,你的认可是我创作的动力! 

⭐️ 收藏,你的青睐是我努力的方向!

✏️ 评论,你的意见是我进步的财富! 

 

任务描述

本关任务:在 Ping 服务端程序框架中,完成接收数据,并回传给相应客户端。

相关知识

为了完成本关任务,你需要掌握:

  1. UDP Ping 服务程序的框架;
  2. 如何接收数据包套接字数据;
  3. 如何发送数据包套接字数据。
服务器程序框架介绍

在这个简单的 UDP Ping 服务器程序中,完成套接字创建及绑定后,当接收到消息后进行简单处理(这里是转化为大写),再将消息回传给相应的客户端。

udp通信中发送与接收数据">UDP通信中发送与接收数据

在 UDP 通信中,使用sendto()函数发送 UDP 数据,将数据发送到套接字,输入参数 address 是形式为(host, port)的元组,指定远程地址,其中host表示服务器地址,port表示服务器端口号。返回值是发送的字节数。

接收数据使用recvfrom()函数实现。输入参数为接收缓冲区大小。该函数接收 UDP 数据,与recv()类似,但返回值是(data, address)。其中data是包含接收数据的字符串,address是发送数据的套接字地址。

示例如下:

  • 接收数据
  1. msg,addr=udp_server.recvfrom(BUFSIZE)
  2. 使用套接字对象udp_server的recvfrom()方法接收数据
  • 发送数据
  1. udp_server.sendto(msg,addr)
  2. 使用套接字对象udp_server的sendto()方法发送数据

编程要求

根据提示,在右侧编辑器中BeginEnd之间补充代码,完成接收 Ping 客户端发送的消息并转发给相应的客户端。

测试说明

平台会对你编写的代码进行测试,客户端发送多个消息,并接收服务器的回传消息,并打印相应的统计信息。

预期输出:

  1. Sequence 1: Reply from 127.0.0.1 RTT = 0.000s
  2. Sequence 2: Request timed out
  3. Sequence 3: Request timed out
  4. Sequence 4: Request timed out
  5. Sequence 5: Request timed out
  6. Sequence 6: Request timed out
  7. Sequence 7: Request timed out
  8. Sequence 8: Request timed out
  9. Sequence 9: Request timed out
  10. Sequence 10: Request timed out

 源程序示例

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 ##########


http://www.niftyadmin.cn/n/5283348.html

相关文章

解决:AttributeError: module ‘scipy.misc’ has no attribute ‘imresize’

解决:AttributeError: module ‘scipy.misc’ has no attribute ‘imresize’ 文章目录 解决:AttributeError: module scipy.misc has no attribute imresize背景报错问题报错翻译报错位置代码报错原因解决方法方法一 scipy版本回退(不推荐&a…

黑格尔哲学,从入门到入坟

身体需要锻炼,心灵也需要锻炼。哲学家思考的大致步骤:确立自己哲学的基本原则,在此原则基础上建构哲学体系。 黑格尔建立了哲学史上最庞大最全面的哲学体系。 黑格尔的对手是康德。 黑格尔哲学包括逻辑学、自然哲学、精神哲学。逻辑学&…

如何快速找到被监控组件的开源GRAFANA模版文件

如何快速找到被监控组件GRAFANA模版文件 1.打开 grafana官网 https://grafana.com/grafana/dashboards 2.搜索框搜索被监控的中间件名称 3.选择拷贝ID 或下载json模版 4.将ID或文件 配置到 grafana 使用 使用ID方法 将值贴如框内 后面进行load操作及配置数据源。 使用jso…

Elasticsearch 分片滚动查询与数据准确性

目录 分片滚动查询的数据准确性 非分片滚动查询的数据准确性 实时写入对查询的影响 结论 分片滚动查询的数据准确性 分片滚动查询概念: 分片滚动查询是指在Elasticsearch中对每个分片进行的连续查询操作,这种查询可以处理大量数据而不会受到深度分页的影响。 数…

Golang 泛型实现原理

文章目录 1.有 interface{} 为什么还要有泛型?2.泛型实现原理2.1 类型参数泛型函数泛型数据结构 2.2 类型约束2.3 编译时生成虚拟方法表单态化 Go 的实现 3.小结参考wenxian 泛型(Generics)是 Go 语言在较早版本缺失的一个特性,直…

音视频类App广告变现如何破局,最大化广告变现收益,让应用增收?

音视频App已然成为了我们日常获取、发布和交换信息的重要方式,在音视频行业不断的拓展中,用户的渗透率提升。 据数据显示,我国网络视听用户的规模已达9亿人次,网民使用率也突破了90%。庞大的市场规模和用户需求吸引了大批开发者和…

《基于 CUDA 的 GPU 并行程序开发指南》中的 imrotate Rotate7 是怎么做优化的

目录 imrotateMC Rotate7 是怎么做优化的 书名:基于 CUDA 的 GPU 并行程序开发指南 imrotateMC Rotate7 是怎么做优化的 书里面没有详细说 void *Rotate6(void* tid) {long tn; // My thread number (ID) is stored here // int row,col,h,…

NVM(nodejs版本管理工具)下载以及设置国内代理

官方github GitHub - nvm-sh/nvm: Node Version Manager - POSIX-compliant bash script to manage multiple active node.js versions 配置代理 vim ~/.nvm/nvm.sh 添加: export NVM_NODEJS_ORG_MIRRORhttps://mirrors.aliyun.com/nodejs-release/安装node nvm install …