20253302 实验三《Python程序设计》实验报告
20253302 2025-2026-2 《Python程序设计》实验三报告
课程:《Python程序设计》
班级: 2533
姓名: 王紫晗
学号:20253302
实验教师:王志强
实验日期:2026年4月27日
必修/选修: 公选课
1.实验内容
此处填写实验的具体内容;
要求1:
-
(1)创建服务端和客户端,选择一个通信端口,用Python语言编程实现通信演示程序;
-
(2)要求包含文件的基本操作,例如打开和读写操作。
-
(3)要求发送方从文件读取内容,加密后并传输;接收方收到密文并解密,保存在文件中。
-
(4)程序代码托管到码云。
要求2:使用LLM生成一个带图形界面的程序
-
(1)分析关键代码的功能和使用方法
-
(2)分析生成程序的优点
-
(3)给出运行过程和结果截图
-
(4)程序代码托管到码云。
2. 实验过程及结果
首先是跟着强哥一步一步地进行一个名为编写的代码,写的基本就是强哥的代码(
#服务端程序
import socket #pip install socket
#创建TCP Socket对象(买了一台圣剑
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#办电话卡,叫127
HOST = "192.168.43.2" #"localhost"
PORT = 3302
#把电话卡插到手机上
server.bind((HOST, PORT))
server.listen(1)#最多1进程,1个人同时打电话
print("服务器。启动!等待客户连接。。。。")
while True:
conn, addr = server.accept()
print(f"已经连接好客户端:{addr}")
#接收消息
while True:
data = conn.recv(1024).decode("utf-8")
if not data: # 客户端断开
print("客户端断开连接")
break
#写到文件里
with open("rec.txt", "a", encoding="utf-8") as f:
f.write("客户端: " + data + "\n")
print(f"客户端的密文是:{data.encode("utf-8")}")
print(f"客户端:{data}")
send_msg=input("我:")
conn.send(send_msg.encode("utf-8"))
print(f"你输入的密文是:{send_msg.encode("utf-8")}")
# 记录发出的消息
with open("rec.txt", "a", encoding="utf-8") as f:
f.write("我: " + send_msg + "\n")
conn.close()
server.close()
#客户端程序
import socket
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#TCP
HOST = "192.168.43.12"
PORT = 3312
client.connect((HOST, PORT))
print("已连接服务!输入 exit 退出")
while True:
# 发送数据
send_msg = input("我:")
client.send(send_msg.encode("utf-8"))
print(f"密文是{send_msg.encode("utf-8")}")
# 将发送的消息写入
with open("sent.txt", "a", encoding="utf-8") as f:
f.write("我: " + send_msg + "\n")
if send_msg.lower() == "exit":
print("客户端断开")
break
# 接收数据
data = client.recv(1024).decode("utf-8")
if not data:
break
# 将接收到的消息写入
with open("sent.txt", "a", encoding="utf-8") as f:
f.write("服务端: " + data + "\n")
print(f"服务端给的密文是:{data.encode("utf-8")}")
print(f"服务端说:{data}")
client.close()
下面是我作为服务端进行操作,与20253312胡宸轩组队进行对话的过程,将我的流量最后一位改成了我的学号2


还有我和客户端进行多轮通话的示例

加密解密方式选择的是UTF-8,因为python可以直接进行utf-8的编码和解码,本来我们想使用base64,但是不可以直接调用函数,需要先把库调用才可以,我们不太会,所以选择utf-8。

使用文件系统,文件选择直接将两方通信得到的结果进行记录

我: 20253312胡宸轩小朋友,我是杰斯奥特曼,你好啊
服务端: 20253302王紫晗同学,正常一点【笑脸】
我: 我是丁真
服务端: 就这样吧,再见
我: exit
我: 20253312胡宸轩小朋友,你好啊
服务端: 20253302王紫晗,我不好【哭脸】
我: 我会告诉塞罗的,塞罗最喜欢小盆骨了,会让你高兴起来的
服务端: 好好好,看不懂,再见!
我: exit
我: 胡宸轩小朋友,你好啊
服务端: 晚上不好,20253302王紫晗同学
我: 盖上被子好好睡一觉就好了,宝贝儿
服务端: 要去干活了【哭】,再见【哭脸】
我: exit
如果输入exit可以退出

这之后是AI生成的代码的效果

这里也是非常成功的实现了通信功能

最后是把代码托管到gitee上
王紫晗的gitee仓库
关于大模型和我自己的程序的优缺点:
- 1.我的代码只能实现我说一句,对方说一句,但是不能我想说几句说几句,这是一个大问题。而AI的代码可以做到一方随意次数输入,不必等对方回复。
- 2.我们的编码和解码方式非常简单,也很容易就被破解了。但是AI选择使用AES加密,32字节的密钥,他就是算到他姥姥家也算不出来(。
- 3.AI生成代码的速度非常快,而且逻辑完备,只有少数地方需要更改,几乎是一次就是正确答案,而我的代码经过了至少5次的更改,调试才能勉强使用。
3. 实验过程中遇到的问题和解决过程
- 问题1:我作为输入端进行操作无法连接队友
![image]()

-
问题1解决方案:发现是队友的防火墙拦截了我的请求,队友更改后成功
![image]()
-
问题2:如果密文在输入前面会导致还没输入,所以密文无法输入
-
问题2解决方案:把密文改到输入后
![image]()
![image]()
-
问题3:在使用AI生成的代码时密钥无法生成
![image]()
-
问题3解决方案:发现应该进行一个名为下载安装cryptography库的行为
![image]()
其他(感悟、思考等)
感悟:AI生成服务端和客户端的所有代码非常快速,跑通基本要求很快,这还是我在给他输入了非常离谱的ptompt后的结果,而且一切看起来完美。但他当时给我的密钥是一个示例,并不是正确的32位密钥,所以我需要学会修改密钥,但如果看不懂那些生成出来的代码,我就无法生成一个自己想要的程序,一遇到报错或需求变化就会完全失败。







浙公网安备 33010602011771号