20253431 2025-2026-2 《Python程序设计》实验三报告
20253431 2025-2026-2 《Python程序设计》实验三报告
课程:《Python程序设计》
班级: 2534
姓名: 吕俊孜
学号:20253431
实验教师:王志强
实验日期:2026年4月27日
必修/选修: 公选课
1.实验内容
(一)实验内容
创建服务端和客户端,服务端在特定端口监听多个客户请求。客户端和服务端通过Socket套接字(TCP/UDP)进行通信。
(二)实验要求
注意事项:
每人必须做一次客户端和一次服务端,且要和队友(标注学号姓名)互相通信。
要求1:
(1)创建服务端和客户端,选择一个通信端口,用Python语言编程实现通信演示程序;
(2)要求发送方输入内容,加密后并传输;接收方收到密文并解密和显示。要求:发方和收方同时输出明文和明文。
(3)程序代码托管到码云。
(4)添加文件操作,有加分。(可选项)
要求2:使用LLM生成一个带图形界面的程序
(1)分析关键代码的功能和使用方法
(2)分析生成程序的优点
(3)给出运行过程和结果截图
(4)程序代码托管到码云。
注:在华为ECS服务器(OpenOuler系统)和物理机(Windows/Linux系统)上使用VIM、PDB、IDLE、Pycharm等工具编程实现。
2. 实验过程及结果
基础通信程序实现:(TCP Socket + 凯撒密码加密)
实现思路:
-
通信协议:选择TCP协议,保证消息可靠传输。
-
加密方式:采用凯撒密码(Caesar Cipher),密钥为随机生成的1~30之间的整数,服务端生成密钥并发送给客户端。
-
交互流程:
服务端启动,监听指定端口(例如8888),等待客户端连接。
客户端连接服务端IP和端口。
服务端生成随机密钥并发送给客户端。
双方输入消息,加密后发送,接收方解密并同时输出明文和密文。
-
异常处理:捕获连接错误、解密失败等异常,避免程序崩溃。
代码方面:
加解密函数核心逻辑:
def encrypt(text, key):
result = ""
for ch in text:
if ch.isalpha():
shifted = ord(ch) + key
if ch.islower():
if shifted > ord('z'):
shifted -= 26
elif ch.isupper():
if shifted > ord('Z'):
shifted -= 26
result += chr(shifted)
else:
result += ch
return result
解密函数只需将key替换为(26 - key)即可。
与队友联调过程:
队友:20253421林资恒
测试步骤:
-
两人连接同一手机热点,确认IP地址在同一网段。
-
一人启动服务端,另一人客户端输入服务端IP和端口进行连接。
-
轮流发送中英文混合消息,观察加密传输和解密显示是否正确。
运行截图:
AI版图形界面版本程序
我选择使用大语言模型豆包生成程序
功能分析
1.一对一会话:服务端启动后,只等待一个客户端连接,双方进行一对一聊天。
2.简单加密传输:所有聊天内容在发送前会进行“凯撒加密”(每个字符的Unicode码点加上一个密钥),接收方再减去密钥解密。网络上传输的是密文。
3.图形化界面:使用Python标准库tkinter实现,操作直观,无需命令行。
4.本地日志记录:客户端和服务端各自将聊天记录(明文和密文)保存到本地的log_client.txt和log_server.txt文件中。
优点分析:
1.图形界面与网络分离:使用了多线程(threading),将耗时的网络连接和接收消息操作放在后台线程中,避免了界面“卡死”。
2.日志持久化:自动记录聊天内容和时间戳,这是一个很实用的功能。
3.密钥协商机制:服务端动态生成密钥,每次连接会话都使用不同的密钥,比写死在代码中要安全一点点。
4.简单的应用层握手:通过发送"check"和回复"OK"来验证密钥是否正确,保证了通信的基本前提。
运行过程与截图:
- 先运行
server_ai.py,点击“启动服务”按钮。 - 再运行
client_ai.py,输入服务端IP(如192.168.43.1)和端口(8888),点击“连接”。 - 双方在输入框中输入消息,点击“发送”,聊天区域显示明文和密文对。
- 程序自动记录聊天内容到文件。
运行截图如下:

代码托管:
3. 实验过程中遇到的问题和解决过程
- 问题1:和同学通信连不上,我能连他但是他不能连我
- 问题1解决方案:关闭了对方的防火墙
其他(感悟、思考等)
感觉网络通信还是很有难度的,平日里似很简单的qq聊天背后也蕴含了很多复杂的代码



浙公网安备 33010602011771号