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

    文章

    258

    浏览量

    30188
  • 语言编程
    +关注

    关注

    0

    文章

    23

    浏览量

    9837
  • python
    +关注

    关注

    51

    文章

    4675

    浏览量

    83466
收藏 人收藏

    评论

    相关推荐

    如何使用linux下gdb来调试python程序

    如何使用linux下gdb来调试python程序  在Linux下,可以使用GDB(GNU调试器)来调试Python程序。GDB是一个强大的调试工具,可以帮助开发者诊断和修复
    的头像 发表于 01-31 10:41 451次阅读

    运行Python程序的几种常见方法

    Python是一种高级编程语言,具有简单易学,易于阅读和调试的特点。当你完成了一个Python程序之后,你需要运行它以检查程序是否按照预期工作。下面是运行
    的头像 发表于 11-28 15:32 470次阅读

    如何运行Python程序

    运行Python程序非常简单。Python是一种解释型语言,这意味着可以直接通过解释器来执行代码。下面我将详细介绍如何运行Python程序
    的头像 发表于 11-24 09:31 702次阅读

    python怎么运行程序

    Python是一种广泛使用的编程语言,它的简易和可读性使得它成为初学者和专业开发人员的首选。在运行Python程序之前,您需要安装Python解释器,然后按照以下步骤进行操作。 步骤1
    的头像 发表于 11-24 09:25 2034次阅读

    python写完程序之后怎么运行

    Python是一门简洁、易学的编程语言,被广泛应用于数据分析、人工智能等领域。在学习Python编程的过程中,了解程序的运行机制是至关重要的。本文将详尽解析Python
    的头像 发表于 11-22 11:10 650次阅读

    趣味程序设计入门

    电子发烧友网站提供《趣味程序设计入门.pdf》资料免费下载
    发表于 11-20 10:36 0次下载
    趣味<b class='flag-5'>程序设计</b>入门

    c语言程序设计概述

    电子发烧友网站提供《开源硬件-开发者智慧之c语言程序设计(带书签).pdf》资料免费下载
    发表于 11-20 10:25 1次下载
    c语言<b class='flag-5'>程序设计</b>概述

    如何在Windows下使用 Supervisor 重新拉起崩溃的Python程序

    我们用Python定时跑一些自动化程序的时候会出现程序崩溃的情况。此时如果你本人不在电脑面前,或者没有留意到程序的崩溃,没有及时重新拉起程序
    的头像 发表于 10-21 11:23 1160次阅读
    如何在Windows下使用 Supervisor 重新拉起崩溃的<b class='flag-5'>Python</b><b class='flag-5'>程序</b>

    Python编程实用指南

    Python 是一种解释型、面向对象、动态数据类型的高级程序设计语言。通过 Python 编程,我们能够解决现实生活中的很多任务。本书是一本面向实践的 Python 编程实用指南。本书
    发表于 09-27 06:21

    时钟DS1302模块实验python代码

    第32讲:时钟DS1302模块实验python代码
    发表于 09-25 08:13

    嵌入式软件程序设计方案

    在嵌入式软件程序设计过程中中,经常会遇到超时(或定时)的处理情况,基本处理思想是在时间到的时候进行相关程序处理,下面介绍两种超时(或定时)的程序设计方案。
    发表于 09-06 09:27 407次阅读
    嵌入式软件<b class='flag-5'>程序设计</b>方案

    浅谈项目中的程序设计思路与步骤

    对于一个没有太多程序设计经验的萌新工程师来说,如何有规划有条理的进行程序设计,是一个很值得学习的课题。在本文中,作者结合自身的经验,浅要的谈一谈项目中的程序设计思路与步骤。
    的头像 发表于 09-04 10:48 582次阅读

    C语言程序设计(ppt版)

    C语言程序设计(ppt版)
    发表于 08-07 15:33 12次下载

    C语言程序设计--火车订票系统

    C语言程序设计--火车订票系统
    的头像 发表于 08-01 00:40 472次阅读
    C语言<b class='flag-5'>程序设计</b>--火车订票系统

    解析PLC梯形图程序设计

    解析PLC梯形图程序设计
    的头像 发表于 06-30 11:14 1024次阅读
    解析PLC梯形图<b class='flag-5'>程序设计</b>