0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

《Python程序设计》实验三报告

li5236 来源:博客园 作者:博客园 2022-03-30 15:21 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

1.实验内容

创建服务端和客户端,服务端在特定端口监听多个客户请求。客户端和服务端通过Socket套接字(TCP/UDP)进行通信

要求:

(1)创建服务端和客户端,选择一个通信端口,用Python语言编程实现通信演示程序;

(2)要求包含文件的基本操作,例如打开和读写操作。

(3)要求发送方从文件读取内容,加密后并传输;接收方收到密文并解密,保存在文件中。

(4)程序代码托管到码云。

2. 实验过程及结果

(1)设计思路

该实验目标是制作一个基于socket的通讯器,根据之前课上学习的内容及课后作业,本次实验不难完成。

加密上选择的是基于pyDes的CBC模式DES加密,实现了客服端与服务器的双向加密通信。基于Python标准库tkinter,实现了可视化选择目标文件的功能。但由于没有具体实现tkinter窗体(极其不标准的使用方法),导致使用该功能后会有一个无内容的tkinter窗体残留,虽然不影响总体使用,但对程序的完成性和一致性有所破坏。

(2)主要代码介绍

部分代码有参考。

报告中只贴出了部分代码,全部代码已上传码云:服务器部分,客户端部分,DES加解密部分

加解密部分:

基于pyDes库实现DES加解密功能。

from pyDes import des, CBC, PAD_PKCS5

import binascii

key_ = ‘12345675’

def des_encrypt(s):

“”“

DES 加密

:param s: 原始字符串

:return: 加密后字符串,16进制

”“”

secret_key = key_

iv = secret_key

k = des(secret_key, CBC, iv, pad=None, padmode=PAD_PKCS5)

en = k.encrypt(s, padmode=PAD_PKCS5)

return binascii.b2a_hex(en)

def des_descrypt(s):

“”“

DES 解密

:param s: 加密后的字符串,16进制

:return: 解密后的字符串

”“”

secret_key = key_

iv = secret_key

k = des(secret_key, CBC, iv, pad=None, padmode=PAD_PKCS5)

de = k.decrypt(binascii.a2b_hex(s), padmode=PAD_PKCS5)

return de

客户端部分:

循环发送字符串给服务器。取‘close_’作为关闭连接的保留字。

import socket

from mydes import des_descrypt, des_encrypt

from tkinter.filedialog import askopenfilename

if __name__ == ‘__main__’:

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.connect((‘127.0.0.1’, 8001))

print(‘连接服务器成功’)

while True:

ch = input(‘1.发送字符串 2.发送文件 3.退出\n请选择想要使用的功能:’)

if ch == ‘1’:

str_ = input(‘请输入要传输的内容:’)

elif ch == ‘2’:

filename = askopenfilename()

with open(filename, ‘r’, encoding=‘utf-8’) as f:

str_ = f.read()

elif ch == ‘3’:

str_ = ‘close_’

str_ = des_encrypt(str_)

s.sendall(str_)

break

else:

print(‘无该选项,请重新输入’)

str_ = des_encrypt(str_)

# print(type(str_))

s.sendall(str_)

data = s.recv(1024)

data = des_descrypt(data)

print(data.decode())

s.close()

print(‘连接已关闭’)

服务器部分:

循环接收客户端发送的数据,并写入文件中。取‘close_’作为关闭连接的保留字。

import socket

from mydes import des_descrypt, des_encrypt

if __name__ == ‘__main__’:

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.bind((‘127.0.0.1’, 8001))

print(‘服务器已创建,正在监听中。..’)

s.listen()

conn, address = s.accept()

while True:

data = conn.recv(1024)

data = des_descrypt(data)

# print(data, type(data))

if data == b‘close_’:

break

else:

with open(‘received’, ‘wb’) as f:

f.write(data)

str_ = ‘服务器已接收:’+str(data)

str_ = des_encrypt(str_.encode())

conn.sendall(str_)

print(‘接收数据:’, data.decode(), ‘\n已写入received.txt文件中’)

s.close()

print(‘服务器关闭’)

(4)程序结果

客户端:

发送字符串:

pYYBAGJEBTqAFNvpAACUbGDumuk707.png

发送文件

pYYBAGJEBUOARje3AAO3NxS4ZAE036.png

结束连接

pYYBAGJEBU2AHG0HAADivBd--cw344.png

服务器:

pYYBAGJEBVaAUKpUAACXU-zdY10605.png

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 程序设计
    +关注

    关注

    3

    文章

    263

    浏览量

    31559
  • 语言编程
    +关注

    关注

    0

    文章

    23

    浏览量

    10105
  • python
    +关注

    关注

    57

    文章

    4857

    浏览量

    89586
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    LABVIEW 2023 Q1调用python后一直报错1671

    LABVIEW 2023Q1调用python后一直报错1671报错信息:PythonNode_AddTwoDoubles.vi中的打开Python会话Python returned
    发表于 11-12 09:51

    挖到宝了!人工智能综合实验箱,高校新工科的宝藏神器

    这款实验箱涵盖了9门课程,包括Python程序设计、机器学习、机器视觉、深度学习、深度视觉、数字图像处理、嵌入式系统及应用、语音识别与传感器、基于视觉的机器人应用。
    的头像 发表于 08-07 14:51 569次阅读
    挖到宝了!人工智能综合<b class='flag-5'>实验</b>箱,高校新工科的宝藏神器

    挖到宝了!人工智能综合实验箱,高校新工科的宝藏神器

    和深度至关重要。这款实验箱涵盖了9门课程,包括Python程序设计、机器学习、机器视觉、深度学习、深度视觉、数字图像处理、嵌入式系统及应用、语音识别与传感器、基于视觉的机器人应用。从基础的程序
    发表于 08-07 14:30

    挖到宝了!比邻星人工智能综合实验箱,高校新工科的宝藏神器!

    和深度至关重要。这款实验箱涵盖了9门课程,包括Python程序设计、机器学习、机器视觉、深度学习、深度视觉、数字图像处理、嵌入式系统及应用、语音识别与传感器、基于视觉的机器人应用。从基础的程序
    发表于 08-07 14:23

    天合跟踪获得DNV第方风洞测试审查报告

    近日, 天合跟踪获得DNV颁发的中国支架行业首张风洞实验方审查报告。该风洞报告由天合跟踪与同济大学合作,针对开拓者1P跟踪支架进行了全新的刚性模型测压试验和先进动力学分析研究,并由
    的头像 发表于 07-08 17:35 683次阅读

    委托测试报告和型式检验报告什么区别

    委托测试报告和型式检验报告是两个不同的概念,它们在认证和合规过程中都有重要作用,但它们的内容、使用范围和法律效力有所不同。一、委托测试报告委托测试报告是由设备制造商或产品进口商委托第
    的头像 发表于 07-03 11:43 1354次阅读
    委托测试<b class='flag-5'>报告</b>和型式检验<b class='flag-5'>报告</b>什么区别

    基于STM32 人群定位、调速智能风扇设计(程序、设计报告、视频演示)

    基于STM32 人群定位、调速智能风扇设计(程序、设计报告、视频演示),有需要的同学推荐下载!
    发表于 05-28 21:34

    程序设计与数据结构

    程序设计与数据结构》重点阐述了大方向内容: 1. C语言学习中的痛点:针对当前工程师在C语言学习中的痛点,如指针函数与函数指针,如何灵活应用结构体等。从变量的要素(变量的类型,变量的值和变量
    发表于 05-13 16:45

    ​如何在虚拟环境中使用 Python,提升你的开发体验~

    。RaspberryPiOS预装了Python3。干扰系统Python的安装可能会给你的操作系统带来问题。安装第Python库时,请务必使用正确的包管理工具。在Lin
    的头像 发表于 03-25 09:34 629次阅读
    ​如何在虚拟环境中使用 <b class='flag-5'>Python</b>,提升你的开发体验~

    零基础入门:如何在树莓派上编写和运行Python程序

    在这篇文章中,我将为你简要介绍Python程序是什么、Python程序可以用来做什么,以及如何在RaspberryPi上编写和运行一个简单的Pyth
    的头像 发表于 03-25 09:27 1527次阅读
    零基础入门:如何在树莓派上编写和运行<b class='flag-5'>Python</b><b class='flag-5'>程序</b>?

    是否可以使用OpenVINO™部署管理器在部署机器上运行Python应用程序

    使用 OpenVINO™部署管理器创建运行时软件包。 将运行时包转移到部署机器中。 无法确定是否可以在部署机器上运行 Python 应用程序,而无需安装OpenVINO™ Toolkit 和 Python
    发表于 03-05 08:16

    有没有什么方案能实现直接用matlab或python调用D4100_usb.dll?

    是32位程序而我的电脑是64位的。 由于实验中主要用matlab编程,使用C++程序很不方便,如果能直接用matlab或python调用D4100_usb.dll就会好很多。 因此,我
    发表于 02-27 06:59

    Python Connector for InterBase连接解决方案

    适用于 InterBase 的 Python 连接器 Python Connector for InterBase 是一种可靠的连接解决方案,用于从 Python 应用程序访问 Int
    的头像 发表于 01-22 14:34 707次阅读

    ID读卡器Python程序开发

    液显ID读卡器UDP协议开发Python程序。代码如下:   # pip install netifacesimport subprocessimport structimport
    的头像 发表于 01-10 16:05 769次阅读

    利用ADS1293与ARM进行SPI数据通信的程序设计该注意什么?

    请教大家,利用ADS1293与ARM 进行SPI 数据通信的程序设计该注意什么?比如比特率的设置该设置什么?有没有相关的例程可以参考?3通道24位数据是按通道的次序每个通道24位这样发送吗?这个24位是不是只是指ECG的信号?谢谢!
    发表于 01-06 06:44