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

计网课后编程作业

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()
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值