学号20242313 2024 - 2025 《Python 程序设计》实验 3 报告
学号20242313 2024 - 2025 《Python 程序设计》实验 3 报告
课程:《Python 程序设计》
班级: 2423
姓名: 曾海鹏
学号:20242313
实验教师:王志强
实验日期:2025 年 4 月 16 日
必修 / 选修: 公选课
1. 实验内容
(1)创建服务端和客户端,服务端在特定端口监听多个客户请求。客户端和服务端通过 Socket 套接字(TCP/UDP)进行通信。
(2)要求包含文件的基本操作,例如打开和读写操作。发送方从文件读取内容,加密后并传输;接收方收到密文并解密,保存在文件中。
(3)最后将程序代码托管到码云。
2. 实验过程及结果
(1)根据老师课程教学代码,选择 Pycharm 作为编程工具,编写服务端和客户端代码。服务端代码监听特定端口,接收客户端发送的加密数据,解密后保存到文件中;客户端代码从文件读取内容,加密后发送给服务端。
(2)测试代码,先启动服务端,再启动客户端,确保test.txt文件存在于客户端代码所在的目录下。测试成功后,服务端所在目录下生成了received_file.txt文件,并且文件内容与test.txt一致。
源代码如下:
# -*- coding: utf-8 -*-
import socket
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
import os
key = os.urandom(16)
iv = os.urandom(16)
def encrypt_message(message):
cipher = AES.new(key, AES.MODE_CBC, iv)
encrypted = cipher.encrypt(pad(message.encode('utf-8'), AES.block_size))
return iv + encrypted
# 创建 socket 对象
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 连接到服务器
server_address = ('localhost', 8888)
client_socket.connect(server_address)
# 发送加密密钥和初始化向量
client_socket.send(key)
client_socket.send(iv)
# 读取 test.txt 文件内容
try:
with open('test.txt', 'r', encoding='utf-8') as file:
file_content = file.read()
# 加密文件内容
encrypted_content = encrypt_message(file_content)
# 发送加密后的文件内容
client_socket.send(encrypted_content)
print('文件内容已发送')
except FileNotFoundError:
print('test.txt 文件未找到')
# 关闭连接
client_socket.close()
# -*- coding: utf-8 -*-
import socket
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
import os
def decrypt_message(encrypted_message, key, iv):
cipher = AES.new(key, AES.MODE_CBC, iv)
decrypted = unpad(cipher.decrypt(encrypted_message[AES.block_size:]), AES.block_size)
return decrypted.decode('utf-8')
# 创建 socket 对象
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定地址和端口
server_address = ('localhost', 8888)
server_socket.bind(server_address)
# 监听连接
server_socket.listen(1)
print('服务器正在监听 {}:{}'.format(*server_address))
# 接受客户端连接
client_socket, client_address = server_socket.accept()
print('接受来自 {} 的连接'.format(client_address))
# 接收加密密钥和初始化向量
key = client_socket.recv(16)
iv = client_socket.recv(16)
# 接收加密后的文件内容
encrypted_content = client_socket.recv(4096)
# 解密文件内容
decrypted_content = decrypt_message(encrypted_content, key, iv)
# 将解密后的内容写入 received_file.txt 文件
with open('received_file.txt', 'w', encoding='utf-8') as file:
file.write(decrypted_content)
print('文件已接收并保存为 received_file.txt')
# 关闭连接
client_socket.close()
server_socket.close()
测试结果如下图所示:




(3)将代码推送到码云仓库。
https://gitee.com/jame-zhp_0/pythonhomework/commit/ba8a03d2197090f449fb633b3a9776fd251a4372
3. 实验过程中遇到的问题和解决过程
- 问题 1:在运行代码时,出现
FileNotFoundError错误。 - 问题 1 解决方案:检查文件路径,确保
test.txt文件存在于客户端代码所在的目录下。 - 问题 2:在将代码推送到码云时,出现权限问题。
- 问题 2 解决方案:检查码云仓库地址是否正确,以及是否有足够的权限进行推送。
其他(感悟、思考等)
通过本次实验,我对 Python 的 Socket 编程有了更深入的理解,学会了如何使用 Socket 进行网络通信,以及如何进行文件的读写和加密操作。同时,也掌握了如何将代码托管到码云,方便代码的管理和分享。在实验过程中,遇到问题并解决问题的过程让我收获颇丰,提高了自己的编程能力和解决问题的能力。
参考资料
- Python 零基础
- 《王志强带我学python》
- 《Python 网络编程》相关书籍和教程

浙公网安备 33010602011771号