《计算机网络—自顶向下方法》 第二章套接字编程:2.UDPping服务器
实验描述
本编程作业的题目描述:
在这个编程作业中,你将用Python编写一个客户ping程序。该客户将发送一个简单的ping报文,接受一个从服务器返回的ping报文,并确定从该客户发送ping报文到接收到ping报文为止的时延。该时延称为往返时延(RTT)。由该客户和服务器提供的功能类似于在现代操作系统中可用的标准ping程序,然而,标准的ping使用互联网控制报文协议(ICMP)(我们将在第4章中学习ICMP)。此时我们将创建一个非标准(但简单)的基于UDP的ping程序。
你的ping程序经UDP向目标服务器发送10个ping报文,对于每个报文,当对应的ping报文返回时,你的客户要确定和打印RTT。因为UDP是一个不可靠协议,由客户发送的分组可能会丢失。为此,客户不能无限期地等待对ping报文的回答。客户等待服务器回答的时间至多为1秒;如果没有收到回答,客户假定该分组丢失并相应地打印一条报文。
在此作业中,我们给出服务器的完整代码(在配套网站中可以找到。你的任务是编写客户代码,该代码与服务器代码非常类似。建议你先仔细学习服务器的代码,然后编写你的客户代码,可以不受限制地从服务器代码中剪贴代码行。
python编写的 使用UDP套接字 跟客户端相连的服务器代码:
# UDPPingerServer.py
# We will need the following module to generate randomized lost packets import random
from socket import *
import random# Create a UDP socket
# Notice the use of SOCK_DGRAM for UDP packets
serverSocket = socket(AF_INET, SOCK_DGRAM)
# Assign IP address and port number to socket
serverSocket.bind(('', 1234)) # 这里的端口号随便取,我就把这里改成1234了while True:# Generate random number in the range of 0 to 10rand = random.randint(0, 10)# Receive the client packet along with the address it is coming frommessage, address = serverSocket.recvfrom(1024)# Capitalize the message from the clientmessage = message.upper()# If rand is less is than 4, we consider the packet lost and do not respondif rand < 4:continue# Otherwise, the server respondsserverSocket.sendto(message, address)
python编写的 使用UDP套接字 用于发送数据包给服务器的客户端代码:
注意:服务器地址直接使用本机localhost(对应的IP地址为:127.0.0.1),
让本地主机既充当客户机又充当服务器,才可以直接在cmd中出运行结果。
# UDPPingerClient.py
from socket import *
import timeserverName = '127.0.0.1' # 服务器地址,本例中使用本地主机
serverPort = 1234 # 服务器指定的端口clientSocket = socket(AF_INET, SOCK_DGRAM) # 创建一个UDP套接字
clientSocket.settimeout(1) # 设置套接字超时值为1s
LostDataCnt = 0 # 计算丢包次数for i in range(0,10):sendTime = time.time()# 记录下开始发送的时间message = ('Ping %d %s' % (i+1,sendTime)).encode() # 生成数据报,编码为bytes以便发送try:clientSocket.sendto(message,(serverName,serverPort)) # 将信息发送到服务器modifiedMessage,serverAddress = clientSocket.recvfrom(1024) # 接收服务器返回的数据rtt = time.time() - sendTime # 服务器返回时间 - 客户机发送时间 = 一次往返时间RTTprint('客户机发送的数据包编号: %d\n返回数据的服务器名称: %s\n往返时间: %.3fs' % (i+1,serverName,rtt))except Exception as e:print('客户机发送的数据包编号: %d\n请求超时' % (i+1))LostDataCnt += 1print('十次请求中丢包的次数为: %d\n' % (LostDataCnt))clientSocket.close() # 关闭套接字
运行效果:
启动服务器:
py UDPPingerServer.py
启动客户机:
python UDPPingServer.py
可选练习【待完成】
- 目前,程序计算每个数据包的往返时间(RTT),并单独打印出来。请按照标准ping程序的模式修改。您需要在客户端每次ping后显示最小,最大和平均RTT。另外,还需计算丢包率(百分比)。
- UDP Ping的另一个类似的应用是UDP Heartbeat。心跳可用于检查应用程序是否已启动并运行,并报告单向丢包。客户端在UDP数据包中将一个序列号和当前时间戳发送给正在监听客户端心跳的服务器。服务器收到数据包后,计算时差,报告丢包(若发生)。如果心跳数据包在指定的一段时间内丢失,我们可以假设客户端应用程序已经停止。实现UDP Heartbeat(客户端和服务器端)。您需要修改给定的UDPPingerServer.py和您自己的UDP ping客户端。
参考资料:
https://github.com/moranzcw/Computer-Networking-A-Top-Down-Approach-NOTES
《计算机网络—自顶向下方法》 第二章套接字编程:2.UDPping服务器相关推荐
- 计算机网络自顶向下方法 第二章套接字编程作业 邮件客户 答案
https://github.com/jzplp/Computer-Network-A-Top-Down-Approach-Answer 作业3: 邮件客户 官方文档 文档翻译 编程作业答案 #改为P ...
- 计算机网络 自顶向下方法 第二章 应用层
计算机网络 自顶向下方法 第二章 应用层 分类:计算机网络-笔记(2) 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 第二章 应用层 Tags: 计算机网络 2.1 应用 ...
- 计算机网络自顶向下方法 第二章 应用层 2.2 Web和HTTP
计算机网络自顶向下方法总结2.2Web和HTTP 目录 2.2 Web和HTTP 2.2.1 HTTP 2.2.2 非持续连接和持续连接 2.2.3 HTTP报文格式 2.2.4 用户与服务器的交互: ...
- 计算机网络-自顶向下方法 第二章课后习题答案(第七版)
复习题 R1. 浏览器:HTTP 对等文件传输:FTP 网络安全协议:SSH 电子邮件:SMTP 远程连接:Telnet R2. 网络体系结构:将通信过程组织成层,例如五层结构. 应用程序结构:客户- ...
- 《UNIX网络编程》读书笔记——第三章 套接字编程简介
第三章 套接字编程简介 一.套接字地址结构 以socket_in命名,定义在<netinet/in.h>头文件中. struct in_addr{ in_addr_t s_addr:} ...
- 计算机网络实验二:UDP套接字编程实现多人聊天
一.实验目的 1. 实现一个能够在局域网中进行点对点聊天的实用程序. 2. 熟悉c++.Java等高级编程语言网络编程的基本操作. 3. 基本了解对话框应用程序的编写过程. 4. 实现UDP套接字编程 ...
- UNIX网络编程 第3章 套接字编程简介
套接字结构类型和相关的格式转换函数 转载于:https://www.cnblogs.com/pluse/p/6520485.html
- UNP学习笔记-第三章套接字编程
套接字地址结构 地址转换函数 地址转换函数在地址的文本表达和存放在套接字地址结构中的二进制值之间进行转换. 例如IPv4中inet_addr, inet_ntoa .新函数:inet_pton,ine ...
- 计算机网络-自顶向下方法 第一章课后习题答案(第七版)
练习题 R1. 无不同: 手机.智能手环等连入网络的都为端系统: Web服务器是端系统: R2. 维基百科:外交礼仪通常被描述为一套国际礼仪规则.这些久经考验的规则使国家和人民更容易在一起生活和工作. ...
最新文章
- CSRF verification failed. Request aborted. 表单提交方法为POST时的报错
- 2021山西高考成绩位次查询,2021年山西高考位次查询及一分一段表排名查询
- JS魔法堂:IE5~9的DragDrop API
- HLS-Demo IOS 视屏直播样例
- k3运行linux,首个Kubernetes操作系统k3OS,附主要功能介绍
- Android low memory killer 机制
- 不相交集ADT(联机算法 + 脱机算法)
- 【CodeForces - 1152C 】Neko does Maths(数学数论,lcm,gcd性质)
- C# Winform使用Windows Media Player播放多媒体整理
- oracle新建对象 权限管理
- vue导出Excel(二)
- RocketMQ中消息的优先级
- 连续两天,8 大技术论坛,微软超 60 个烧脑议题等你来战
- 跳出公式,看清全局,图神经网络(GCN)原理详解
- Solr 4.10.3 集成 IK Analyzer 2012FF 中文分词器
- vue 路由守卫 解析
- 微信小程序中base64转换成图片
- 推荐:12条经过验证的创业赚钱秘诀!(转)
- 史上最全的Android文章精选合集
- 9. docker 容器执行sql文件
热门文章
- 网络安全学习:系统文本编辑命令
- (附源码)计算机毕业设计ssm毕业生导师双选系统
- 三星 联通 i9502 root 未安装su二进制
- 【转】百度编辑器UEditor
- 如何删除 MOSS 共享服务提供程序 (SSP, Shared Service Provider)
- python产品质量分析_Python数据分析实战之葡萄酒质量分析
- 2021年中国电影行业发展现状及重点企业对比分析:电影票房收入达472.58亿元[图]
- JavaScript-读 You Dont Know JS,this到底是什么
- java美容美发项目下载_汉之源美容美发管理系统
- 医学图像分割基石-UNet