20244302 《Python程序设计入门》实验三实验报告
计算机网络通信与加密实验报告
课程:《Python程序设计》
班级: 2443
姓名: 刘家瑞
学号:20244302
实验教师:王志强
实验日期:2025年4月16日
必修/选修: 公选课
1. 实验内容
本次实验的主要目标是构建基于 Socket 套接字的通信系统,实现服务端与客户端的双向通信,并在此基础上添加加密功能,保证数据传输的安全性。实验分为两个阶段:首先实现基础的 TCP 通信,然后引入加密机制,实现文件内容的加密传输和解密存储。
2. 实验过程及结果
2.1 实验过程
基础通信功能实现
首先,我们使用 Python 语言实现了基于 TCP 协议的服务端和客户端程序。服务端程序会在指定端口监听客户端的连接请求,而客户端程序则负责发起连接并与服务端进行数据交互。
服务端代码实现:

客户端代码实现:

加密通信功能实现
在基础通信功能的基础上,我引入了 AES 加密算法,实现了文件内容的加密传输和解密存储功能。客户端从文件读取内容,加密后发送给服务端;服务端接收密文,解密后保存到文件中。
加密服务端代码实现:


加密客户端代码实现:


运行结果

代码托管
我们将实验代码托管到了码云平台,项目地址为:
https://gitee.com/eswindous/python

2.2 实验结果
基础通信功能测试中,客户端和服务端能够成功建立连接,并实现了文本消息的双向传输。加密通信功能测试中,我们创建了一个包含测试内容的文本文件,客户端成功加密并发送该文件,服务端接收后解密并保存,经比对,解密后的文件内容与原始文件完全一致,证明加密和解密过程正确无误。
3. 实验过程中遇到的问题和解决过程
问题 1:编码问题导致通信异常
在基础通信功能实现初期,客户端和服务端之间无法正常交换消息,显示为乱码或报错。
解决过程:
通过查阅资料,了解到 Python 中字符串与字节流的转换需要明确指定编码方式。在发送数据前使用encode('utf-8')方法将字符串转换为字节流,接收数据后使用decode('utf-8')方法将字节流转换为字符串,问题得到解决。
问题 2:IP 地址配置错误
在多机测试环境中,客户端无法连接到服务端,提示 "连接被拒绝" 或 "无法访问目标主机"。
解决过程:
首先通过ipconfig(Windows) 或ifconfig(Linux/macOS) 命令确认服务端的 IP 地址,确保客户端配置的目标 IP 地址与服务端实际 IP 一致。同时检查防火墙设置,开放服务端监听的端口,最终成功建立连接。
问题 3:加密解密不匹配
在实现加密通信功能时,服务端解密后得到的内容与原始文件不符,出现乱码或解密失败的情况。
解决过程:
仔细检查加密和解密过程,发现是密钥和初始化向量 (IV) 不一致导致的。确保客户端和服务端使用相同的密钥和 IV,并正确处理数据填充,使用Crypto.Util.Padding模块中的pad和unpad函数进行填充和去填充操作,最终解决了问题。
4. 其他(感悟、思考等)
通过本次实验,我对 Socket 编程有了更深入的理解。Socket 作为网络编程的基础,提供了一种简单而强大的方式来实现不同主机间的进程通信。TCP 协议的可靠性保证了数据传输的准确性,非常适合需要确保数据完整到达的应用场景。
在实现加密功能的过程中,我认识到数据安全在网络通信中的重要性。即使数据在传输过程中被截获,经过加密处理后也能保证其内容不被泄露。同时,密钥管理是加密系统中的关键环节,一旦密钥泄露,整个加密系统将失去保护作用。
此外,实验中遇到的问题让我深刻体会到调试和排查问题能力的重要性。当程序出现错误时,需要有系统性的方法去定位和解决问题,查阅文档、分析日志和逐步调试都是非常有效的手段。
总的来说,本次实验不仅加深了我对计算机网络原理的理解,也提高了我的编程和问题解决能力,为今后从事网络相关的开发工作打下了坚实的基础。
浙公网安备 33010602011771号