当前位置: 首页 > news >正文

20254212 2025-2026-2 《Python程序设计》实验3报告

课程:《Python程序设计》
班级: 2542
姓名: 张弛
学号:20254212
实验教师:王志强
实验日期:2026年4月28日
必修/选修:专选课

1.实验内容

(1)实验内容
创建服务端和客户端,服务端在特定端口监听多个客户请求。客户端和服务端通过Socket套接字(TCP/UDP)进行通信。
(2)实验要求
注意事项:每人必须做一次客户端和一次服务端,且要和队友(标注学号姓名)互相通信。

要求1:
①创建服务端和客户端,选择一个通信端口,用Python语言编程实现通信演示程序;
②要求发送方输入内容,并传输;接收方收到信息并显示。

要求2:使用LLM生成一个带图形界面的程序
①分析关键代码的功能和使用方法
②分析生成程序的优点
③给出运行过程和结果截图

注:在华为ECS服务器(OpenOuler系统)和物理机(Windows/Linux系统)上使用VIM、PDB、IDLE、Pycharm等工具编程实现。

2. 实验过程及结果

(1)按照课上程序进行试验:
修改自己的IP地址:
教室网络不知为何很卡,连上个人热点:)
50c81947dd4571a8e4f7c1b4e256e625
修改ip地址,后两位改为学号
23b683e6b47661cb5a531bd293cf1d9b

创建客户端,20254212张弛192.168.1.12(客户端)与20254226黄婉婷(服务端)进行通讯
代码如下
47c7ca45308d183da559ae01476797eb
613c0e37863e4756fbec3a14345b5c87

创建服务端,20254212张弛192.168.1.12(服务端)与20254226黄婉婷192.168.1.26(客户端)进行通讯
代码如下屏幕截图 2026-05-10 231751.png
99e50ac353b5a72fba772b8980ad0031.png
99e50ac353b5a72fba772b8980ad0031.png

e081b04eecd409e3144709bdfe8804f7

(2)使用LLM生成一个带图形界面的程序:
给出运行过程和结果截图:
程序:
分别为客户端和服务端程序

import socket
import threading
import tkinter as tk
from tkinter import scrolledtext, Entry, Button# ========== 在这里改自己和队友信息 ==========
KEY = 123
IP = '0.0.0.0'
PORT = 8888# 服务端 姓名学号
SERVER_NAME = "队友名字"
SERVER_ID = "队友学号"
# ==========================================# 简单加解密
def encrypt(text):return ''.join([chr(ord(c) ^ KEY) for c in text])def decrypt(text):return ''.join([chr(ord(c) ^ KEY) for c in text])class ServerGUI:def __init__(self, root):self.root = rootself.root.title(f"服务端 | {SERVER_NAME}({SERVER_ID})")self.chat_area = scrolledtext.ScrolledText(root, width=55, height=18)self.chat_area.pack(padx=10, pady=10)self.chat_area.insert(tk.END, f"【服务端】{SERVER_NAME} 已启动,等待连接...\n")self.msg_entry = Entry(root, width=45)self.msg_entry.pack(padx=10, pady=5)Button(root, text="发送消息", command=self.send_msg).pack(pady=5)self.server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)self.server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)self.server_socket.bind((IP, PORT))self.server_socket.listen(5)self.client_socket = Noneself.addr = None# 等待连接线程threading.Thread(target=self.listen_conn, daemon=True).start()def listen_conn(self):self.client_socket, self.addr = self.server_socket.accept()self.chat_area.insert(tk.END, f"已连接客户端 {self.addr}\n")# 专门用来一直接收客户端消息threading.Thread(target=self.recv_loop, daemon=True).start()def recv_loop(self):while True:try:data = self.client_socket.recv(1024).decode("utf-8")if not data:breakmsg = decrypt(data)# 显示对方发来的消息self.chat_area.insert(tk.END, f"客户端:{msg}\n")self.chat_area.see(tk.END)except:breakdef send_msg(self):msg = self.msg_entry.get().strip()if msg and self.client_socket:en_msg = encrypt(msg)self.client_socket.send(en_msg.encode("utf-8"))self.chat_area.insert(tk.END, f"我({SERVER_NAME}):{msg}\n")self.chat_area.see(tk.END)self.msg_entry.delete(0, tk.END)if __name__ == "__main__":win = tk.Tk()ServerGUI(win)win.mainloop()
import socket
import threading
import tkinter as tk
from tkinter import scrolledtext, Entry, Button# ========== 配置信息 ==========
KEY = 123
# 这里填队友电脑的局域网IP
SERVER_IP = "127.0.0.1"
SERVER_PORT = 8888# 客户端 你的姓名学号
CLIENT_NAME = "张弛"
CLIENT_ID = "20254212"
# =============================def encrypt(text):return ''.join([chr(ord(c) ^ KEY) for c in text])def decrypt(text):return ''.join([chr(ord(c) ^ KEY) for c in text])class ClientGUI:def __init__(self, root):self.root = rootself.root.title(f"客户端 | {CLIENT_NAME}({CLIENT_ID})")self.chat_area = scrolledtext.ScrolledText(root, width=55, height=18)self.chat_area.pack(padx=10, pady=10)self.chat_area.insert(tk.END, f"【客户端】{CLIENT_NAME} 正在连接服务端...\n")self.msg_entry = Entry(root, width=45)self.msg_entry.pack(padx=10, pady=5)Button(root, text="发送消息", command=self.send_msg).pack(pady=5)# 连接服务端self.client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)try:self.client_socket.connect((SERVER_IP, SERVER_PORT))self.chat_area.insert(tk.END, "连接服务端成功!\n")# 开启接收线程threading.Thread(target=self.recv_loop, daemon=True).start()except:self.chat_area.insert(tk.END, "连接失败,请检查IP和端口\n")def recv_loop(self):while True:try:data = self.client_socket.recv(1024).decode("utf-8")if not data:breakmsg = decrypt(data)self.chat_area.insert(tk.END, f"服务端:{msg}\n")self.chat_area.see(tk.END)except:breakdef send_msg(self):msg = self.msg_entry.get().strip()if msg:en_msg = encrypt(msg)self.client_socket.send(en_msg.encode("utf-8"))self.chat_area.insert(tk.END, f"我({CLIENT_NAME}):{msg}\n")self.chat_area.see(tk.END)self.msg_entry.delete(0, tk.END)if __name__ == "__main__":win = tk.Tk()ClientGUI(win)win.mainloop()

LLM程序优点:
1.开发效率高:无需手动编写,几分钟内即可获得一个完整聊天程序,节省大量时间,操作简单。
2.示图清晰,效果图生成界面清晰,代码结构清晰。
3.服务端客户端变成一体,更加简单。
4.更稳定,没有警告报错情况。

截图:

99e50ac353b5a72fba772b8980ad0031
a326c9d69fe9b4c01bc762eb7bfe0336

3. 实验过程中遇到的问题和解决过程
问题1:在连接过程中,始终显示连接不成功。
问题1解决方案:连接同一个热点,关闭防火墙,成功连接
问题2:大模型生成的程序无法有效运行后保留。
问题2解决方案:精进代码,重新让LLM生成,成功输入输出文字和代码。
问题3:在最后上传截图时,由于防火墙全部打开权限太高拒绝了公共网络的访问导致图片一直上传不成功
问题3解决方案:检查网络设置,允许访问

其他(感悟、思考等)
今日主要进行了Socket操作实验,初始阶段在更改IP地址并与同学建立连接时遇到了很多困难。具体问题包括很多,比如IP地址配置错误、防火墙没关闭、服务端与客户端IP不一致等非常之多的困难。经向同学(还有豆包)请教后,这些问题得以有效解决,最终成功运行程序,完成了首个实验。在使用大模型生成程序代码时,程序仅能实现一开始连接,但无法正常发送和接收消息,而且完成程序后秒退。通过优化LLm指令,成功生成了可以收发消息的程序代码,并在调整IP地址后,准确完成了任务。总体而言,本次实验过程虽有很多困难,可以说是三次实验中难度最高的,比前两次难的多,但收获也很多学到了更多知识。

参考资料
《Python程序设计》

http://www.jsqmd.com/news/792492/

相关文章:

  • 开发者开源本地方案,DeepSeek V4 Flash实现本地部署,成本大降!
  • 超实用!电机、仪表盘、流动条…一个专为工控量身打造的 WinForm 控件库
  • 鼠标操作效率革命:X-Mouse Controls的5分钟终极配置指南
  • 从定长到变长再到中断:拆解单总线CPU时序演进,理解性能提升的关键设计
  • 为OpenClaw配置Taotoken作为其大模型供应商
  • AI-Native Development实战框架(Gartner 2025认证模型+微软/Anthropic联合验证版)
  • DeepSeek拟融500亿,低定价开源模式下515亿美元高估值能否撑住?与同行对比见分晓
  • 2026年5月新消息:大通路附近专业防水补漏服务商选择指南与深度推荐 - 2026年企业推荐榜
  • MATLAB散点图进阶:从基础绘制到动态色彩与三维可视化
  • 2026上海GEO优化可靠品牌排行:名录及选型全指南 - 得赢
  • 3步解锁QQ音乐加密文件:QMCDecode完整解决方案指南
  • 个人开发者如何利用 Taotoken 管理多个项目的模型调用与预算
  • 大模型行业融资疯狂:70亿美元三天涌入,创业公司抢滩独立生存最后窗口!
  • 纯电商用车再生制动能量回收模糊控制策略【附代码】
  • 为什么你的3D地理场景总是失真?BlenderGIS插件3步完美解决方案
  • Coolapk-UWP:基于UWP技术的桌面端酷安社区客户端技术深度解析
  • 奇点大会周边酒店技术适配白皮书:支持会议直播推流、多设备协同充电、边缘计算终端供电的5家硬核之选
  • 5分钟掌握AVIF插件:彻底解决Photoshop图像压缩效率问题的终极方案
  • Day24
  • 蚕健康病害检测数据集(4000张)|YOLO训练数据集 智慧养蚕 病害识别 农业AI 健康监测
  • 【大模型灰度发布黄金法则】:奇点智能大会首次披露7大避坑指标与实时熔断阈值
  • 魔珐星云:打造企业BI数据讲解智能体,让数据自己会说话
  • 企业如何利用Taotoken的多模型能力构建智能客服系统
  • AMD Ryzen SMU调试工具:释放你的处理器隐藏性能的终极指南 [特殊字符]
  • 【SITS大会技术社区交流活动深度复盘】:20年一线专家亲述3大未公开的破圈协作模型与落地工具包
  • 塑料瓶目标检测数据集(3000张)|YOLO训练数据集 智能回收 垃圾分类 环境巡检 工业视觉
  • Taotoken用量看板如何帮助开发者清晰掌握消费明细
  • 我对面向对象的简单理解
  • OBS视频特效插件终极指南:如何用5种专业模糊算法提升你的直播和视频质量
  • 062、伺服驱动器通信协议:CANopen与EtherCAT