2025-2026-2 《Python程序设计》实验三报告
学号 2025-2026-2 《Python程序设计》实验三报告
课程:《Python程序设计》
班级:2512
姓名:胥安
学号:20251223
实验教师:王志强
实验日期:2026年5月9日
必修/选修:公选课
1.实验内容
1. 利用Python Socket套接字编程,基于TCP协议搭建服务端与客户端,自定义IP地址与端口,实现服务端端口监听、客户端接入请求,完成两端网络通信;本人分别充当一次服务端、一次客户端,与队友(学号:XXX 姓名:XXX)完成跨设备互相通信。
2. 实现消息加密传输功能:发送方手动输入明文,通过自定义算法加密后以密文形式网络传输;接收方接收密文后进行解密还原明文,发送端和接收端控制台同时输出明文与密文,满足加密通信展示要求。
3. 增加文件操作加分功能:将每次通信的时间戳、收发明文、密文信息写入本地日志文件,实现聊天记录永久保存。
4. 在Windows物理机、Linux系统以及华为ECS(OpenEuler)服务器上,分别使用PyCharm、IDLE、VIM工具编写并运行程序,适配多平台运行环境。
5. 使用大模型生成带图形界面GUI的Socket加密通信程序,分析关键代码功能、程序优缺点,记录运行流程并保存结果截图,将命令行版与GUI版全部代码托管至码云平台。
2.实验过程及结果
2.1实验代码呈现
服务端代码
import socket
from datetime import datetime
def encrypt(msg):
return msg[::-1]
def decrypt(msg):
return msg[::-1]
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
HOST = "192.168.1.105"
PORT = 1223
server.bind((HOST, PORT))
server.listen(1)
print("服务端已经启动,等待客户端连接......")
conn, addr = server.accept()
print(f"已连接客户端:{addr}")
打开日志文件,追加模式
with open("chat_log.txt", "a", encoding="utf-8") as log_file:
log_file.write(f"\n=== 新会话开始 {datetime.now()} 客户端:{addr} ===\n")
while True:
cipher_data = conn.recv(1024).decode("utf-8")
if not cipher_data or cipher_data == "exit":
print("聊天结束")
with open("chat_log.txt", "a", encoding="utf-8") as log_file:
log_file.write(f"{datetime.now()} [系统] 聊天结束\n")
break
plain_data = decrypt(cipher_data)
print(f"客户端发来 -> 明文:{plain_data} | 密文:{cipher_data}")
写入日志
with open("chat_log.txt", "a", encoding="utf-8") as log_file:
log_file.write(f"{datetime.now()} [客户端] 明文:{plain_data} | 密文:{cipher_data}\n")
send_plain = input("我:")
send_cipher = encrypt(send_plain)
conn.send(send_cipher.encode("utf-8"))
print(f"我发送 -> 明文:{send_plain} | 密文:{send_cipher}\n")
写入日志
with open("chat_log.txt", "a", encoding="utf-8") as log_file:
log_file.write(f"{datetime.now()} [服务端] 明文:{send_plain} | 密文:{send_cipher}\n")
if send_plain == "exit":
break
conn.close()
server.close()
客户端代码
import socket
from datetime import datetime
def encrypt(msg):
return msg[::-1]
def decrypt(msg):
return msg[::-1]
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
HOST = "172.16.177.219"
PORT = 4444
client.connect((HOST, PORT))
print("已连接服务端!输入exit退出聊天!")
打开日志文件,追加模式
with open("client_chat_log.txt", "a", encoding="utf-8") as log_file:
log_file.write(f"\n=== 新会话开始 {datetime.now()} ===\n")
while True:
send_plain = input("我:")
send_cipher = encrypt(send_plain)
client.send(send_cipher.encode("utf-8"))
print(f"我发送 -> 明文:{send_plain} | 密文:{send_cipher}\n")
写入日志
with open("client_chat_log.txt", "a", encoding="utf-8") as log_file:
log_file.write(f"{datetime.now()} [客户端] 明文:{send_plain} | 密文:{send_cipher}\n")
if send_plain == "exit":
break
cipher_data = client.recv(1024).decode("utf-8")
if not cipher_data or cipher_data == "exit":
print("聊天结束")
with open("client_chat_log.txt", "a", encoding="utf-8") as log_file:
log_file.write(f"{datetime.now()} [系统] 聊天结束\n")
break
plain_data = decrypt(cipher_data)
print(f"服务端发来 -> 明文:{plain_data} | 密文:{cipher_data}")
写入日志
with open("client_chat_log.txt", "a", encoding="utf-8") as log_file:
log_file.write(f"{datetime.now()} [服务端] 明文:{plain_data} | 密文:{cipher_data}\n")
client.close()
借助LLM生成基于tkinter的GUI图形界面代码






2.2 实验设计
选用TCP面向连接可靠传输模式,自定义字符串反转作为加解密算法;设定通信IP:172.16.177.219,端口:4444;服务端负责监听等待客户端连接,建立连接后循环收发加密消息;客户端主动连接服务端,实现双向聊天;同时引入文件操作,自动生成日志文件记录所有通信内容;后期基于LLM生成tkinter图形界面版本,可视化实现聊天、明文密文展示功能。
2.3 实验实现过程
1. 编写基础加解密函数,利用字符串切片反转实现加密和解密,逻辑简单且满足课程实验加密要求。
2. 编写TCP命令行服务端代码:创建IPv4流式套接字,绑定IP和端口、开启监听;接收客户端连接后,循环接收密文、解密展示明文和密文,同时写入日志文件;支持手动输入回复消息,加密后发送,输入exit可退出通信。
3. 编写TCP命令行客户端代码:创建套接字主动连接服务端,输入消息自动加密发送,控制台打印明文、密文并记录日志;接收服务端密文并解密展示,输入exit断开连接。
4. 本机与队友设备配置同一网段IP与端口,关闭防火墙、开放4444端口,分别运行服务端与客户端,完成双向文字收发、加密解密、日志记录全流程测试。
5. 在华为ECS OpenEuler系统使用VIM编辑代码、PDB调试,在Windows使用PyCharm、IDLE运行,多平台均可正常通信。
6. 借助LLM生成基于tkinter的GUI图形界面聊天程序,保留加密、通信、日志核心功能;分析关键代码逻辑、总结程序优点,运行程序并截取界面运行效果图;将命令行版、GUI版所有代码上传至码云完成托管。
2.4 实验运行结果
1. 命令行版服务端与客户端成功建立TCP连接,可稳定双向发送消息,加密、解密功能正常,两端均能同步打印明文和密文。
2. 文件操作功能生效,自动生成 chat_log.txt 和 client_chat_log.txt ,按时间戳完整保存每条聊天记录,实现数据持久化,完成加分要求。
3. 已和队友成功互相通信,轮流扮演服务端和客户端,交互流程正常无报错。
4. 程序可在Windows、Linux、华为ECS OpenEuler系统下正常编译运行,适配VIM、PDB、PyCharm、IDLE等开发工具。
5. LLM生成的GUI图形界面程序运行正常,可视化界面可完成连接、发消息、展示明文密文,关键代码逻辑清晰,运行截图完整留存,全部代码已成功托管码云。
以下为运行截图



将代码提交到Git上


- 实验过程中遇到的问题和解决过程
- 问题1:客户端无法连接服务端,提示连接被拒绝或超时
- 问题1解决方案:检查服务端与客户端IP、端口是否完全统一;关闭Windows系统防火墙,华为ECS服务器安全组放行4444端口,重启程序后连接成功。
- 问题2:传输中文消息出现乱码,无法正常显示文字
- 问题2解决方案:统一数据编解码格式,发送数据使用 encode("utf-8") ,接收数据使用 decode("utf-8") ,规范编码后中文可正常加解密与展示。
- 问题3:日志文件内容被覆盖,无法保存多条聊天记录
- 问题3解决方案:修改文件打开方式为追加模式 a ,采用with上下文管理器自动关闭文件,实现逐条记录追加写入,保留完整会话日志。
- 问题4:输入exit指令后程序卡死,套接字无法正常关闭
- 问题4解决方案:在通信循环中增加exit关键字判断,检测到输入exit后立即跳出循环,主动关闭客户端与服务端套接字,同时在日志中标记会话结束。
- 问题5:LLM生成的GUI代码导入模块报错、界面布局错乱
- 问题5解决方案:补全tkinter依赖库,调整控件网格布局参数,修正Socket通信绑定逻辑,调试后GUI界面布局整齐、通信功能正常。
感悟、思考
本次实验完整完成了TCP Socket服务端与客户端开发、自定义加密通信、文件日志操作、多平台部署、GUI图形程序生成与分析等全部要求。通过亲手编写网络通信代码,深入理解了TCP面向连接的通信原理,掌握了Socket绑定、监听、连接、收发数据的核心流程。
在实现消息加密与解密的过程中,理解了简单数据加密的基本思想,同时通过文件操作实现聊天日志记录,熟练掌握了Python文件读写的实际应用。和队友互相配合完成服务端与客户端通信,体会了网络通信中双方配置统一的重要性。
在华为ECS服务器和不同系统下调试程序,熟悉了VIM、PDB等工具的使用,提升了跨平台代码运行与排错能力。借助大模型生成GUI程序并进行代码分析,学会了合理利用AI辅助开发,同时能独立分析代码功能、评判程序优劣。
实验中解决连接失败、中文乱码、文件覆盖、程序退出异常等问题,极大锻炼了代码调试和问题排查能力,为后续网络编程、图形界面开发等学习内容打下了坚实的实践基础。

浙公网安备 33010602011771号