20242210 2025-2026-2 《Python程序设计》实验三报告
课程:《Python程序设计》
班级: 2422
姓名: 陈俊祎
学号:20242210
实验教师:王志强
实验日期:2026年4月27日
必修/选修: 公选课
1.实验内容
创建服务端和客户端,服务端在特定端口监听多个客户请求。客户端和服务端通过Socket套接字(TCP/UDP)进行通信。
- 实验过程及结果
下面是cli程序的运行截图
![image]()
![image]()
以下是我与搭档20242218段锦坤同学进行连接的图形化界面
分别有服务端和客户端的实验截图



- 实验过程中遇到的问题和解决过程
问题1:客户端无法连接服务端,长时间无响应或抛出“Connection refused”
解决方案:检查服务端是否已正常启动并监听正确IP和端口。若在同一台机器测试,服务端绑定127.0.0.1,客户端连接相同地址;若在不同机器,需绑定0.0.0.0并关闭防火墙或添加入站规则。同时确认网络可达(使用ping测试)。
问题2:图形化界面运行时,网络收发操作导致界面“卡死”
解决方案:将Socket的收发操作放入单独的后台线程(threading.Thread),避免阻塞主事件循环。同时利用队列(queue.Queue)在线程和主界面之间安全传递数据。使用PyQt或Tkinter的after()方法定时检查队列也能达到同样效果。
其他(感悟、思考等)
通过本次实验,我加深了对网络编程中C/S架构的理解。Socket编程看似只是调用几个API,但实际需要考虑很多边界条件和异常处理——例如连接中断、数据不完整、并发资源竞争等。与搭档段锦坤同学合作时,我们分别实现了命令行版本和图形界面版本,并通过联调发现并解决了不同Python版本下字节串编码/解码不一致的问题,体会到了团队协作和规范接口(统一使用UTF-8编码)的重要性。
另外,对比TCP和UDP的特性:TCP面向连接、可靠但开销大;UDP无连接、高效但可能丢包。本实验主要使用TCP实现,后续可以尝试基于UDP实现简单的广播或多播功能,进一步对比两种协议的实际表现。
同时,图形界面的加入使程序更具可用性,但也带来了异步编程的复杂度。今后在设计类似应用时,会优先考虑使用asyncio库来简化异步网络和界面之间的协调。
参考资料
《Python程序设计》


