计算机网络课后——socket编程(UDP ping)

本博客详细介绍了如何使用Python实现一个基于UDP的Ping程序。通过发送10个ping报文到服务器,程序会计算并打印每个报文的往返时延(RTT),同时处理可能的数据包丢失情况。该程序为理解网络通信提供了实际操作经验。
部署运行你感兴趣的模型镜像

计网课后编程作业

UDP ping程序

在这个编程作业中,你将用Python编写一个客户ping程序。该客户将发送一个简单的ping报文,接收一个从服务器返回的对应pong报文,并确定从该客户发送ping报文到接收到pong报文为止的时延。该时延称为往返时延(RTT)。由该客户和服务器提供的功能类似于在现代操作系统中可用的标准ping程序。然而,标准的ping使用互联网控制报文协议(ICMP)。此时我们将创建一个非标准(但简单)的基于UDP的ping程序。

你的ping程序经UDP向目标服务器发送10个ping报文。对于每个报文,当对应的pong报文返回时,你的客户要确定和打印RTT。因为UDP是一个不可靠的协议,由客户发送的分组可能丢失。为此,客户不能无限期地等待对ping报文的回答。客户等待服务器回答的时间至多为1秒;如果没有收到回答,客户假定该分组丢失并相应地打印一条报文。

在此作业中,你将给出服务器的完整代码(在配套网站中可找到)。你的任务是编写客户代码,该代码与服务器代码非常类似。建议你先仔细学习服务器的代码,然后编写你的客户代码,可以随意地从服务器代码中剪贴代码行。
 

备注

毫无疑问,这是我当时提交过的作业,同样能够正常运行,绝对莫问忒~😜
如果没有问题就麻烦给个赞哦~
 
下面赶紧奉上:
 
 

源码
Server端
import random
from socket import *

HOST = ''
PORT = 12001
BUFSIZE = 1024
ADDR = (HOST, PORT)

udpSerSock = socket(AF_INET, SOCK_DGRAM)
udpSerSock.bind(ADDR)

while True:
	print('wating for connection...')
	data, addr = udpSerSock.recvfrom(BUFSIZE)
	rand = random.randint(0, 10)
	print(rand, addr)
	data = data.upper()
	if rand < 4:                          #人工模拟丢包
		continue
	udpSerSock.sendto(data, addr)

udpSerSock.close()

 

Client端
from socket import *
from time import *
from datetime import *
HOST = '127.0.0.1'
PORT = 12001
BUFSIZE = 1024
ADDR = (HOST, PORT)
TIMEOUT = 1
udpCliSock = socket(AF_INET, SOCK_DGRAM)
udpCliSock.settimeout(TIMEOUT)
for i in range(0, 10):
    data = input('> ')
    if not data:
        break
    try:
        begin_time = datetime.now()
        udpCliSock.sendto(data.encode(), ADDR)
        data, ADDR = udpCliSock.recvfrom(BUFSIZE)
        end_time = datetime.now()
        if data:
            print('Response: ', data)
        time = (end_time - begin_time).microseconds  # 微秒
        print('RTT: ', time, 'ms')
    except Exception as e:
        print(e)
udpCliSock.close()

您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值