计算机网络实验(5) 您所在的位置:网站首页 实现迷宫算法实验心得 计算机网络实验(5)

计算机网络实验(5)

2023-07-09 07:24| 来源: 网络整理| 查看: 265

📍实验目的

模拟转发算法和校验和算法

📍实验内容

编写一个计算机程序用来计算一个文件的16位效验和。最快速的方法是用一个32位的整数来存放这个和。记住要处理进位(例如,超过16位的那些位),把它们加到效验和中。 要求: 1)以命令行形式运行:check_sum infile 其中check_sum为程序名,infile为输入数据文件名。 2)输出:数据文件的效验和

📍实验分析

① 需要将字符转化为十六进制; ② 对奇偶长度进行判断,并做出额外处理; ③ 两两合并; ④ 相加,对进位部分取出后,再加到最后的较验和中。

📍程序流程图

在这里插入图片描述

📍实验代码 import argparse # 利用命令行读入 def readfile(path): with open(path,'r',encoding='utf-8-sig') as f: content=f.read() f.close() return content parser = argparse.ArgumentParser(description='ArgparseTry') parser.add_argument('--path',required=True,type=str) args = parser.parse_args() checkStr=readfile(path=args.path) print(checkStr) # 将字符串转化为十六进制 hexDataList = [hex(ord(c)).replace('0x', '') for c in checkStr] # 对奇数长度字节的尾部置0 if len(hexDataList) % 2 == 1: hexDataList.append('00') print(hexDataList) # 两两合并 numList = ['0x' + hexDataList[i] + hexDataList[i+1] for i in range(0, len(hexDataList), 2)] print(numList) # 相加 checkStr = hex(sum([int(c, 16) for c in numList])) checkStr = checkStr.replace('0x', '') print(checkStr) # 处理进位 if len(checkStr) > 4: checkStr1 = '0x' + checkStr[:len(checkStr) - 4] checkStr2 = '0x' + checkStr[len(checkStr) - 4:] checkStr = int(checkStr1, 16) + int(checkStr2, 16) checkStr = hex(checkStr).replace('0x', '') print("数据文件的效验和:", checkStr) 📍实验结果

创建infile.txt文件,输入内容:Hello world. 在这里插入图片描述

在pycharm的终端输入如下命令: python check_sum.py --path infile.txt 结果如下: 在这里插入图片描述

检验结果: 71fc: 0111 0001 1111 1100 ↓↓↓ 取反: 1000 1110 0000 0011 ↓↓↓ 8e03

模拟客户端接收: 4865+6C6C+6F20+776F+726C+642E+8E03(检验码) = 2FFFD ↓↓↓ 2FFFD / 0x10000 + 2FFFD % 0x10000 = 0xFFFF ↓↓↓ 取反:0x0000,即为0,数据检验成功!

再检验一个 在这里插入图片描述

检验结果: a0d: 1010 0000 1101 ↓↓↓ 取反: 0101 1111 0010 ↓↓↓ 5f2

模拟客户端接收: 4920+616D+2061+2067+656E+74BC+656D+616E+7E00+5f2(检验码) = 30FFC ↓↓↓ 2FFFD / 0x10000 + 2FFFD % 0x10000 = 0xFFFF ↓↓↓ 取反:0x0000,即为0,数据检验成功!

📍实验心得

1. 用命令行运行 我之前写程序一直都是通过按钮进行运行,所以用命令行形式运行对我来说比较新颖,很快,我能自然联想到直接使用python check_sum便可以在命令行中运行,但有个问题我就不知道了:如何在运行程序的时候,给他加入相应的参数?于是,借鉴了博客,采用python自带的argparse包,就可以通过运行python check_sum --path infile.txt 运行程序了。 在这里插入图片描述 2.改进方向: 程序在处理大量信息时效率不够高,猜测是“两两合并”和“求和”时带来的时间损耗,需要从此方面入手进行改进程序,来适应数据较多的情况。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有