20253117 实验三《Python程序设计》实验报告
🎯 2025-2026-2 《Python程序设计》实验x报告
| 课程名称 | 《Python程序设计》 | 班级 | 2531 |
|---|---|---|---|
| 姓名 | 李世航 | 学号 | 20253117 |
| 实验教师 | 王志强 | 实验日期 | 2026年4月27日 |
| 课程类型 | 公选课 |
✨ 一、实验内容
-
创建服务端和客户端,服务端在特定端口监听多个客户请求。客户端和服务端通过Socket套接字(TCP/UDP)进行通信。每人必须做一次客户端和一次服务端,且要和队友(标注学号姓名)互相通信。
-
要求1:
(1)创建服务端和客户端,选择一个通信端口,用Python语言编程实现通信演示程序; (2)要求发送方输入内容,加密后并传输;接收方收到密文并解密和显示。要求:发方和收方同时输出密文和明文。 (3)程序代码托管到码云。 (4)添加文件操作,有加分。(可选项) -
要求2:使用LLM生成一个带图形界面的程序
(1)分析关键代码的功能和使用方法 (2)分析生成程序的优点 (3)给出运行过程和结果截图 (4)程序代码托管到码云。
🔍 二、实验过程及结果
📋 2.1 实验准备
我的队友是20253202吴江浩
📈 2.2 实验步骤
- 步骤1: 我首先跟着老师编写了初步的代码,并实现了自己扮演客户端和服务端的通信
import socket
# 创建TCP socket(买手机)
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#办电话卡
HOST = "0.0.0.0"
PORT = 1245
server_socket.bind((HOST, PORT))#电话卡插手机
server_socket.listen(1)
print("服务端已启动,等待连接……")
conn, addr = server_socket.accept()
print(f"已连接到客户端: {addr}")
#接收消息
data = conn.recv(1024).decode("utf-8")
print(f"收到客户端消息: {data}")
send_msg = input("我:")
conn.send(send_msg.encode("utf-8"))
conn.close()
server_socket.close()
import socket
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
HOST = "127.0.0.1"
PORT = 1245
client.connect((HOST, PORT))
print("已连接到服务端")
# 发送消息
send_msg = input("我:")
client.send(send_msg.encode("utf-8"))
# 接收消息
data = client.recv(1024).decode("utf-8")
print(f"服务端: {data}")
client.close()

- 步骤2: 之后,我升级了代码,实现循环和加密功能
import socket
# 加密函数
def encrypt(text, key=3):
result = ""
for char in text:
result += chr(ord(char) + key)
return result
# 解密函数
def decrypt(text, key=3):
result = ""
for char in text:
result += chr(ord(char) - key)
return result
# 创建TCP socket
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
HOST = "192.168.43.17"
PORT = 2225
server_socket.bind((HOST, PORT))
server_socket.listen(1)
print("服务端已启动,等待连接……")
conn, addr = server_socket.accept()
print(f"已连接到客户端: {addr}")
# 打开文件记录聊天
file = open("chat_log.txt", "a", encoding="utf-8")
while True:
# 接收密文
cipher = conn.recv(1024).decode("utf-8")
if not data:
break
# 解密
plain = decrypt(cipher)
print("\n【收到】")
print("密文:", cipher)
print("明文:", plain)
# 写入文件
file.write(f"客户端密文:{cipher},明文:{plain}\n")
file.flush()
if plain == "exit":
break
# 发送消息
send_plain = input("\n我:")
send_cipher = encrypt(send_plain)
# 输出明文 + 密文
print("\n【发送】")
print("明文:", send_plain)
print("密文:", send_cipher)
# 发送密文
conn.send(send_cipher.encode("utf-8"))
# 写入文件
file.write(f"服务端明文:{send_plain},密文:{send_cipher}\n")
file.flush()
if send_plain == "exit":
break
file.close()
conn.close()
server_socket.close()
import socket
# 加密
def encrypt(text, key=3):
result = ""
for char in text:
result += chr(ord(char) + key)
return result
# 解密
def decrypt(text, key=3):
result = ""
for char in text:
result += chr(ord(char) - key)
return result
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
HOST = "192.168.43.17"
PORT = 2225
client.connect((HOST, PORT))
print("已连接到服务端")
# 打开文件记录聊天
file = open("client_log.txt", "a", encoding="utf-8")
while True:
# 发送
send_plain = input("\n我:")
send_cipher = encrypt(send_plain)
print("\n【发送】")
print("明文:", send_plain)
print("密文:", send_cipher)
client.send(send_cipher.encode("utf-8"))
# 写入文件
file.write(f"客户端明文:{send_plain},密文:{send_cipher}\n")
file.flush()
if send_plain == "exit":
break
# 接收
cipher = client.recv(1024).decode("utf-8")
plain = decrypt(cipher)
print("\n【收到】")
print("密文:", cipher)
print("明文:", plain)
# 写入文件
file.write(f"服务端密文:{cipher},明文:{plain}\n")
file.flush()
if plain == "exit":
break
file.close()
client.close()
- 步骤3: 下面,是我和队友互相通信
4.1 我首先配置了我手机热点的IP地址为198.168.43.17

4.2 之后,我和队友链接后进行通信


这是文件操作

- 步骤4:使用LLM生成一个带图形界面的程序
(1)首先让AI给出代码
import socket
import threading
import tkinter as tk
from tkinter import scrolledtext, END
def encrypt(text, key=3):
result = ""
for char in text:
result += chr(ord(char) + key)
return result
def decrypt(text, key=3):
result = ""
for char in text:
result += chr(ord(char) - key)
return result
class ServerGUI:
def __init__(self, root):
self.root = root
self.root.title("加密聊天 - 服务端")
self.root.geometry("550x500")
self.chat_area = scrolledtext.ScrolledText(root, width=65, height=18)
self.chat_area.pack(pady=10)
self.chat_area.insert(END, "【系统】服务端已启动,等待客户端连接...\n")
self.msg_entry = tk.Entry(root, width=50)
self.msg_entry.pack(pady=5)
self.send_btn = tk.Button(root, text="发送消息", command=self.send_msg)
self.send_btn.pack(pady=5)
self.conn = None
threading.Thread(target=self.start_server, daemon=True).start()
def start_server(self):
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
HOST = "192.168.43.17"
PORT = 2225
server_socket.bind((HOST, PORT))
server_socket.listen(1)
self.conn, addr = server_socket.accept()
self.chat_area.insert(END, f"【系统】已连接客户端:{addr}\n")
while True:
try:
cipher = self.conn.recv(1024).decode("utf-8")
if not cipher:
break
plain = decrypt(cipher)
self.chat_area.insert(END, f"\n【客户端】明文:{plain}\n【密文】{cipher}\n")
self.chat_area.see(END)
if plain == "exit":
break
except:
break
def send_msg(self):
msg = self.msg_entry.get().strip()
if not msg or not self.conn:
return
cipher = encrypt(msg)
self.chat_area.insert(END, f"\n【我】明文:{msg}\n【密文】{cipher}\n")
self.conn.send(cipher.encode("utf-8"))
self.chat_area.see(END)
self.msg_entry.delete(0, END)
if msg == "exit":
self.conn.close()
if __name__ == "__main__":
root = tk.Tk()
ServerGUI(root)
root.mainloop()
import socket
import threading
import tkinter as tk
from tkinter import scrolledtext, END
def encrypt(text, key=3):
result = ""
for char in text:
result += chr(ord(char) + key)
return result
def decrypt(text, key=3):
result = ""
for char in text:
result += chr(ord(char) - key)
return result
class ClientGUI:
def __init__(self, root):
self.root = root
self.root.title("加密聊天 - 客户端")
self.root.geometry("550x500")
self.chat_area = scrolledtext.ScrolledText(root, width=65, height=18)
self.chat_area.pack(pady=10)
self.chat_area.insert(END, "【系统】正在连接服务端...\n")
self.msg_entry = tk.Entry(root, width=50)
self.msg_entry.pack(pady=5)
self.send_btn = tk.Button(root, text="发送消息", command=self.send_msg)
self.send_btn.pack(pady=5)
self.client = None
threading.Thread(target=self.connect_server, daemon=True).start()
def connect_server(self):
self.client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
HOST = "192.168.43.17"
PORT = 2225
try:
self.client.connect((HOST, PORT))
self.chat_area.insert(END, "【系统】已成功连接服务端!\n")
except:
self.chat_area.insert(END, "【系统】连接失败!\n")
return
while True:
try:
cipher = self.client.recv(1024).decode("utf-8")
if not cipher:
break
plain = decrypt(cipher)
self.chat_area.insert(END, f"\n【服务端】明文:{plain}\n【密文】{cipher}\n")
self.chat_area.see(END)
if plain == "exit":
break
except:
break
def send_msg(self):
msg = self.msg_entry.get().strip()
if not msg or not self.client:
return
cipher = encrypt(msg)
self.chat_area.insert(END, f"\n【我】明文:{msg}\n【密文】{cipher}\n")
self.client.send(cipher.encode("utf-8"))
self.chat_area.see(END)
self.msg_entry.delete(0, END)
if msg == "exit":
self.client.close()
if __name__ == "__main__":
root = tk.Tk()
ClientGUI(root)
root.mainloop()
(2)运行AI的代码


(3)生成程序的优点
- ** 带图形界面(GUI),操作简单直观 **
不用敲命令行,点开就能用,输入文字点发送即可,任何人都能快速上手。 - ** 自动加密传输,聊天内容更安全 **
采用字符偏移加密算法,网络上传输的是密文,不会直接暴露真实聊天内容。 - ** 明文、密文同时显示 **
发送和接收时,界面会同时展示原始明文和加密后的密文,方便观察加密效果。 - ** TCP 可靠传输,消息不丢失 **
基于 TCP 协议建立连接,传输稳定,适合局域网内一对一聊天。
⚠️ 三、实验过程中遇到的问题和解决过程
- ❌ 问题1:服务端和客户端老是链接不上
✅ 解决方案:多次尝试,发现是IP不符、端口不对、WiFi连的不是同一个等等问题 - ❌ 问题2:有的时候莫名报错
✅ 解决方案:,询问AI后,发现是一些东西没有安装,打开CMD,输入“pip install ”,安装对应模块
💡 四、其他(感悟、思考等)
本次《Python 程序设计》加密聊天系统实验,不仅是一次技术实操的锻炼,更是一场思维与能力的双重提升,让我对 Python 编程、网络通信以及问题解决有了更为深刻的认知与体会。
实验之初,我从最基础的 Socket 套接字编程入手,编写简单的客户端与服务端代码,实现了最基本的双向通信。看似简单的代码,却藏着诸多细节 ——IP 地址的配置、端口的选择、编码格式的统一,哪怕一个微小的失误,都可能导致 “ConnectionRefusedError” 这样的连接失败问题。
📖 五、参考资料
- 📚 AI大模型的纠错以及一些问题的处理
- 📚 Python Socket 网络编程实战教程 菜鸟教程:https://www.runoob.com/python/python-socket.html
📖 六、Gitee托管
本次实验代码已托管至Gitee


仓库链接:git -home

浙公网安备 33010602011771号