# 20252428 2025-2026-2 《Python程序设计》实验三报告
20252428 2025-2026-2 《Python程序设计》实验三报告
课程:《Python程序设计》
班级: 2524
姓名: 代林淞
学号: 20252428
实验教师:王志强
实验日期:2026年4月27日
必修/选修: 公选课
1.实验内容
创建服务端和客户端,服务端在特定端口监听客户请求。客户端和服务端通过Socket套接字(TCP)进行通信。
实验要求
- 每人必须做一次客户端和一次服务端,且要和队友互相通信
- 发送方输入内容,加密后并传输;接收方收到密文并解密和显示
- 发方和收方同时输出明文和密文
- 使用LLM生成带图形界面的程序,分析关键代码功能和使用方法,分析生成程序的优点,给出运行过程和结果
2. 实验过程及结果
2.1 加密原理
本实验采用XOR加密 + Base64编码的方式实现数据加密:
KEY = "12345678"
def encrypt(msg):
# XOR加密:明文字符与密钥循环XOR
encrypted = ""
for i, c in enumerate(msg):
encrypted += chr(ord(c) ^ ord(KEY[i % len(KEY)]))
# Base64编码,使其可打印
return base64.b64encode(encrypted.encode()).decode()
def decrypt(msg):
# Base64解码 + XOR解密
decoded = base64.b64decode(msg.encode()).decode()
decrypted = ""
for i, c in enumerate(decoded):
decrypted += chr(ord(c) ^ ord(KEY[i % len(KEY)]))
return decrypted
2.2 命令行版本
服务器端(实验3服务器端.py)
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
HOST = "10.71.163.28"
PORT = 4444
server.bind((HOST, PORT)) # 绑定IP和端口
server.listen(5) # 监听连接,最大队列5
conn, addr = server.accept() # 接受客户端连接
# 循环处理:接收->解密显示->输入->加密发送
while True:
encrypted_data = conn.recv(1024).decode()
plaintext = decrypt(encrypted_data)
print(f"【接收】明文:{plaintext}")
print(f"【接收】密文:{encrypted_data}")
send_msg = input("请输入回复:")
encrypted_reply = encrypt(send_msg)
conn.send(encrypted_reply.encode())
print(f"【发送】明文:{send_msg}")
print(f"【发送】密文:{encrypted_reply}")
客户端(实验3客户端.py)
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
HOST = "10.71.163.27" # 服务器IP
PORT = 4444
client.connect((HOST, PORT)) # 连接服务器
# 循环处理:输入->加密发送->接收->解密显示
while True:
send_msg = input("请输入发送内容:")
encrypted = encrypt(send_msg)
client.send(encrypted.encode())
print(f"【发送】明文:{send_msg}")
print(f"【发送】密文:{encrypted}")
encrypted_reply = client.recv(1024).decode()
reply = decrypt(encrypted_reply)
print(f"【接收】明文:{reply}")
print(f"【接收】密文:{encrypted_reply}")
运行结果
服务器端输出:


客户端输出:


2.3 GUI版本(使用LLM生成)
关键代码功能分析
| 组件 | 功能 | 说明 |
|---|---|---|
socket.socket(AF_INET, SOCK_STREAM) |
创建TCP套接字 | IPv4地址族,TCP协议 |
bind((HOST, PORT)) |
绑定地址端口 | 服务器绑定IP和端口 |
listen(5) |
监听连接 | 最大等待队列5个 |
accept() |
接受连接 | 阻塞等待客户端连接 |
connect() |
发起连接 | 客户端连接服务器 |
threading.Thread |
多线程 | 接收消息不阻塞UI |
tkinter |
GUI库 | Python内置,无需安装 |
scrolledtext |
滚动文本框 | 显示聊天记录 |
GUI服务器关键代码
class ChatServerApp:
def start_server(self):
self.server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.server_socket.bind((host, port))
self.server_socket.listen(1)
threading.Thread(target=self.accept_client, daemon=True).start()
def accept_client(self):
self.conn, addr = self.server_socket.accept()
threading.Thread(target=self.receive_messages, daemon=True).start()
def send_message(self):
encrypted = encrypt(msg)
self.conn.send(encrypted.encode())
self.log(f"【发送】明文: {msg}")
self.log(f"【发送】密文: {encrypted}")
GUI客户端关键代码
class ChatClientApp:
def connect_server(self):
self.client_socket.connect((host, port))
threading.Thread(target=self.receive_messages, daemon=True).start()
def send_message(self):
encrypted = encrypt(msg)
self.client_socket.send(encrypted.encode())
self.log(f"【发送】明文: {msg}")
self.log(f"【发送】密文: {encrypted}")
def receive_messages(self):
while self.running:
encrypted_data = self.client_socket.recv(1024).decode()
plaintext = decrypt(encrypted_data)
self.log(f"【接收】明文: {plaintext}")
self.log(f"【接收】密文: {encrypted_data}")
生成程序的优点
- 可视化界面:图形化操作,无需命令行
- 实时显示:明文和密文同时显示,直观清晰
- 多线程处理:接收消息不阻塞主界面,响应流畅
- 状态显示:实时显示连接状态(未启动/监听中/已连接)
- 输入验证:空消息不允许发送,防止无效通信
- 滚动查看:聊天记录可滚动,支持长对话
- 易用性:回车键或按钮均可发送,操作便捷
运行过程和结果
3. 实验过程中遇到的问题和解决过程
-
问题1:客户端连接服务器时出现"Connection refused"错误
- 问题1解决方案:检查服务器IP是否正确,确保服务器先启动并处于监听状态,防火墙允许端口通信
-
问题2:GUI界面在接收消息时卡死
- 问题2解决方案:使用
threading.Thread将接收消息的阻塞操作放入独立线程,避免阻塞主UI线程
- 问题2解决方案:使用
-
问题3:解密后显示乱码
- 问题3解决方案:在加密后使用Base64编码,确保传输的数据都是可打印字符,避免编码问题
其他(感悟、思考等)
通过本次实验,我掌握了:
- Python Socket编程:学习了TCP服务器和客户端的创建、绑定、监听、接受连接和数据收发流程
- 数据加密实现:理解了XOR加密原理和Base64编码的作用,实现了简单的对称加密
- 网络通信调试:学会了使用IP地址和端口进行网络通信,理解了客户端/服务器架构
本次实验让我认识到网络安全的重要性,虽然本实验使用的XOR加密强度较低,但体现了加密通信的基本原理,为后续学习更复杂的加密算法奠定了基础。


浙公网安备 33010602011771号