20241310 2024-2025-2 《Python程序设计》实验三报告

作业信息

这个作业属于哪个课程 2025年春全院公选Python (北京电子科技学院)
这个作业要求在哪里 实验三 Socket编程技术
这个作业的目标 创建服务端和客户端,服务端在特定端口监听多个客户请求。客户端和服务端通过Socket套接字(TCP/UDP)进行通信。
作业正文 本博客链接
课程名称 《Python程序设计》
班级 2413
姓名 苏子涛
学号 20241310
实验教师 王志强
实验日期 2025年4月16日
必修/选修 公选课

1.实验内容

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

注:本次作业为双人合作作业,由我和20241114陈飞达同学互相作为服务端和客户端进行通信。
特别鸣谢:可爱的飞达同学,和我一起完成了双人通信,给了我很大的支持与鼓励。

(二)实验要求

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

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

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

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

2. 实验过程及结果

必要过程先写出来
展示ip
ipconfig/all

首先是上课的时候实现的个人简单通信(不含加密等等)(直接展示结果)
如下:



然后是在双人通信前的个人小测试(这个也只展示结果,代码在后面):



最后是双人通信,代码如下:
服务端:


客户端:


结果如下:







本来想用凯撒的,但凯撒传不了中文,最终只好整个AES好难555

安装pycryptodome 库(这个前面忘了写了)

代码解释(流程):
服务端:
使用 AES 加密算法,用于接收客户端发送的加密数据,并将其解密后保存到文件中。
导入 Crypto.Cipher 中的 AES 用于 AES 加密和解密,Crypto.Util.Padding 中的 unpad 用于去除填充,socket 用于网络通信,os 用于文件路径操作。
定义密钥和初始化向量:key 和 iv 是 AES 加密和解密所需的密钥和初始化向量。
用aes_decrypt 函数接收加密数据,使用 AES 的 CBC 模式进行解密,将解密后的数据转换为字符串返回。
创建一个 TCP 套接字,绑定到指定的 IP 地址和端口,并开始监听客户端连接。
然后接受客户端的连接,接收客户端发送的加密数据。
然后调用 aes_decrypt 函数对加密数据进行解密,如果解密失败则抛出异常。将加密数据和解密后的数据保存到文件 server_log.txt 中,同时将解密后的数据保存到 received_file.txt 中。
(这边为啥要把加密前后的数据都保存进去主要是为了方便看清楚加密有没有正常进行,算是小小地测试一下)
进行异常处理,打印出错误信息提醒自己

客户端:
导入 Crypto.Cipher 中的 AES 用于 AES 加密,Crypto.Util.Padding 中的 pad 用于填充数据,os 用于文件路径操作,socket 用于网络通信。
定义密钥和初始化向量key 和 iv 。
定义加密函数aes_encrypt 用于接收明文数据,将其编码为字节类型并进行填充,然后使用 AES 的 CBC 模式进行加密,返回加密后的数据。
创建一个 TCP 套接字,连接到指定的服务端地址和端口。
选择文件或输入内容:询问用户是否使用已有的文件,如果文件不存在则提示用户输入新内容,并将内容保存到 send_file.txt 中。
(这样就不一定要现敲要内容了)
读取文件内容,调用 aes_encrypt 函数对其进行加密,如果加密失败则抛出异常。将加密前和加密后的数据保存到文件 client_log.txt 中。
询问用户是否发送加密后的数据,如果用户确认则发送数据,否则取消发送。
进行异常处理,如 ConnectionRefusedError、FileNotFoundError 等,并打印错误信息。

整这个AES确实折磨了

最后提交代码

收工!!!

3. 实验过程中遇到的问题和解决过程

  • 问题1:服务端积极拒绝(忘了截图了)
  • 问题1解决方案:听老师的话尝试关闭防火墙但不奏效
    后来人工!!仔细检查发现用错ip了,应该用无线局域网适配器 WLAN,之前用成以太网那个了
  • 问题2:客户端服务端对接不上
  • 问题2解决方案:发现没有用同一个ip(客户端也要用服务端ip)
  • 问题3:文件出不来
  • 问题3解决方案:服务端漏了import os(漏东漏西的哎)
  • 问题4:文件里面只有解码后的结果,没法测试加密是否正常进行
  • 问题4解决方案:把加密后的数据也print出来一起放文件里边

其他(感悟、思考等)

这次实验比起之前的两次实验自学要求高了不少,之前只是在老师给的代码基础上进行修修补补和小创新,这次直接整了个加密出来,上csdn看加密怎么做看得我有点脑阔疼,但最后看到加密成功并且成功通信还是很激动愉悦,自学还是很重要的,尤其是在计算机高级语言学习之中。
同伴飞达给了我巨大的助力,团队合作是伟大的,好友的力量是无限的!!!特别特别鸣谢(撒花撒花)
然后就是没了,燃尽了大脑空白感悟不出来了

参考资料

脑细胞(死亡过多)
csdn
老师的建议
AI

posted @ 2025-04-23 00:09  诺奇布卡  阅读(62)  评论(0)    收藏  举报