当前位置: 代码迷 >> 综合 >> 《计算机网络自顶向下》Socket Lab2 UDP Pinger Lab
  详细解决方案

《计算机网络自顶向下》Socket Lab2 UDP Pinger Lab

热度:51   发布时间:2023-11-17 17:37:24.0

文章目录

    • 前引
    • Lab2 UDP Pinger Lab
      • Lab2 文档查阅
      • 创建Client 客户端代码
      • Lab2 检验Lab实验成果


前引


各位好 第二个Lab 刚刚才做完 第二个Lab就是实现一个UDP PING的软件 但是显然 我们实验是用的本地网络 基本上不会丢包 我们只能人工的设置丢失 哈哈哈 我们是通过随机数 小于4 即0、1、2、3就丢弃 大于等于4 即直接发送即可 这部分还是挺简单的 下面先看看实验文档吧


Lab2 UDP Pinger Lab


Lab2 文档查阅


方便大家下载相关文档 下面是下载链接 中文翻译找到Python3 socket即可
Pearson Computer Networking: a Top-Down Approach, 8th Edition

下面是Lab2的中文翻译 简单明了就是 自己写一个UDP Ping的小程序
然后他给了服务器的代码 我在下面贴一下
在这里插入图片描述


下面就是很简单的服务器代码
上面也分析写了 就是通过随机值

import random
from socket import *
serverSocket = socket(AF_INET, SOCK_DGRAM)
serverSocket.bind(('0.0.0.0', 2333))
print("Server ready...")
while True:rand = random.randint(0, 10)message, address = serverSocket.recvfrom(1024)message = message.upper()# If rand is less is than 4, we consider the packet lost and do not respondif rand < 4:    continueserverSocket.sendto(message, address)

创建Client 客户端代码


这部分挺简单的 看代码应该就能看得懂 就不多说了
大家直接看代码就好了
由于用的perf_counter 都很精确的 并且由于是本机IP 时间回报更是小了
所以我这边把数据乘上了1000 用ms来近似表示

import time
from socket import *
serverName = '127.0.0.1'
serverPort = 2333
clientSocket = socket(AF_INET, SOCK_DGRAM)
message = 'ping'
for i in range(1,11):t = time.perf_counter()clientSocket.sendto(message.encode(),(serverName,serverPort))try:clientSocket.settimeout(1.0)ret = clientSocket.recv(1024).decode('utf-8')tmp = (time.perf_counter() - t)*1000print("{} {} {:.2f}ms".format(ret,i,tmp))except:print("{} {} {}".format('PING',i,"lost"))

Lab2 检验Lab实验成果


点了两次 得到下面的结果 从结果上面看 应该是正确的 哈哈
那下一个Lab见

在这里插入图片描述

在这里插入图片描述

  相关解决方案