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

    浏览量

    31783
  • 语言编程
    +关注

    关注

    0

    文章

    23

    浏览量

    10146
  • python
    +关注

    关注

    58

    文章

    4885

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    使用PYTHON进行的跨平台仿真

    内部的解决方案,而且还允许跨平台模拟,以从其他程序或编程语言获益,并结合熟悉物理光学特性的VirtualLab Fusion,从而扩展模拟、优化、设计和后处理的选项。 因此,我们正在深入研究
    发表于 04-02 08:21

    [VirtualLab] 使用Python运行VirtualLab Fusion光学仿真

    摘要 VirtualLab Fusion允许Python外部访问其建模技术、求解器和结果。这个用例介绍了一种使用路径变量和Visual Studio代码将Python连接到VirtualLab
    发表于 03-31 09:39

    请问单片机开发的程序设计语言主要有哪几种?

    单片机开发的程序设计语言主要有哪几种?
    发表于 01-14 08:29

    没有专利的opencv-python 版本

    所有 官方发布的 opencv-python 核心版本(无 contrib 扩展)都无专利风险——专利问题仅存在于 opencv-contrib-python 扩展模块中的少数算法(如早期 SIFT
    发表于 12-13 12:37

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

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

    termux如何搭建python游戏

    termux如何搭建python游戏 Termux搭建Python游戏开发环境的完整指南 一、Termux基础环境准备 Termux是一款无需root即可在安卓设备上运行的Linux终端
    发表于 08-29 07:06

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

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

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

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

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

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

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

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

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

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

    跟老齐学Python:从入门到精通

    础的学习者介绍一门时下比较流行、并且用途比较广泛的编程语言,所以,本书读起来不晦涩,并且在其中穿插了很多貌似与Python 编程无关,但与学习者未来程序员职业生涯有关的内容。 获取完整文档资料可下载附件哦!!!! 如果内容有帮助可以关注、点赞、评论支持一下哦~
    发表于 06-03 16:10

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

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

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

    基于STM32 人群定位、调速智能风扇设计(程序、设计报告、视频演示)项目下载! 纯分享帖,需要者可点击附件免费获取完整资料~~~【免责声明】本文系网络转载,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请第一时间告知,删除内容!
    发表于 05-23 20:35

    程序设计与数据结构

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