学号 2025-2026-2 《Python程序设计》实验3报告
课程:《Python程序设计》
班级: 2542
姓名: 邢艺馨
学号:20254201
实验教师:王志强
实验日期:2026年4月28日
必修/选修: 专选课
1.实验内容
创建服务端和客户端,服务端在特定端口监听多个客户请求。客户端和服务端通过Socket套接字(TCP/UDP)进行通信。
2. 实验过程及结果
(我的学号为20254201,队友学号为20254209)
要求1:
(1)创建服务端和客户端,选择一个通信端口,用Python语言编程实现通信演示程序;
首先编写好服务端和客户端的代码,然后我和队友连接同一热点确保在同一网络,修改ip地址保证最后一位为符合要求的自己学号。
因为队友先做服务端,所以先改成她的学号:

(2)要求发送方输入内容,并传输;接收方收到信息并显示。
我做客户端,我们互相发送消息问候(bushi):

接下来我做服务端,互发消息:

要求2:使用LLM生成一个带图形界面的程序
使用豆包生成程序:


运行过程及结果截图:
我当客户端

我当服务端

关键代码的功能和使用方法:
服务端
1. start_server 函数:核心功能是启动 TCP 服务,使用 socket 库创建 TCP 套接字,绑定本机所有 IP(0.0.0.0)与默认端口 8888,开启监听(最大排队 5 个连接),并启动独立线程执行 accept_clients 函数,避免阻塞 GUI 界面。使用方法:点击服务端界面“启动服务”按钮,自动调用该函数,启动服务后等待客户端连接。
2. accept_clients 函数:核心功能是持续等待客户端连接,通过死循环调用 socket 的 accept() 方法接收客户端连接请求,每接入一个客户端,就启动一个独立线程调用 handle_client 函数,实现多客户端并发处理。使用方法:由 start_server 函数自动启动,无需手动操作,后台持续运行。
3. handle_client 函数:核心功能是处理单个客户端的通信,接收客户端发送的消息(通过 recv(1024) 方法,以 utf-8 解码),打印实时日志,同时自动回复“服务端已收到:XXX”格式的确认消息;当客户端断开连接时,移除该客户端连接,关闭套接字。使用方法:由 accept_clients 函数自动调用,每个客户端对应一个独立线程,全程后台处理。
4. log 函数:核心功能是将服务端的连接、消息收发、断开等事件,实时输出到 GUI 滚动文本框,并自动滚动到最新日志,便于实验观察。使用方法:在其他核心函数中按需调用,传入需要显示的日志信息即可。
5. stop_server 函数:核心功能是关闭服务端套接字,停止端口监听,释放端口资源。使用方法:点击服务端界面“停止服务”按钮,自动调用该函数,停止服务并打印日志。
客户端
1. connect_server 函数:核心功能是根据输入的服务端 IP(默认 127.0.0.1)和端口(默认 8888),发起 TCP 连接,连接成功后启动独立线程执行 receive_msg 函数,用于接收服务端消息。使用方法:输入服务端 IP 和端口后,点击“连接服务”按钮,自动调用该函数,连接失败会打印异常提示。
2. receive_msg 函数:核心功能是后台持续接收服务端发送的消息,以 utf-8 解码后,打印到客户端 GUI 聊天记录区域;若与服务端断开连接,会及时打印断开提示。使用方法:由 connect_server 函数自动启动,后台运行,不卡顿客户端界面。
3. send_message 函数:核心功能是获取客户端输入框中的消息,以 utf-8 编码后通过 socket 发送给服务端,同时将发送的消息显示在本地聊天记录区域,发送成功后清空输入框。使用方法:在输入框输入消息后,点击“发送消息”按钮,自动调用该函数。
4. disconnect 函数:核心功能是关闭客户端套接字,断开与服务端的连接,释放连接资源。使用方法:点击客户端界面“断开连接”按钮,自动调用该函数,打印断开日志。
生成程序优点:
1. 操作便捷直观:基于 tkinter 搭建图形化界面,无需使用命令行,按钮、输入框、日志/聊天区域布局清晰,实验过程中只需点击按钮、输入内容即可完成操作,便于观察和记录实验现象。
2. 支持多线程并发:服务端通过多线程为每个客户端分配独立处理线程,客户端通过后台线程接收消息,避免了单线程导致的界面卡顿,可实现多个客户端同时与服务端通信,符合 TCP 并发通信实验需求。
3. 代码结构清晰、模块化强:核心功能按函数分工明确,服务端与客户端代码完全分离,关键函数的功能单一且易理解,便于在实验报告中分析和阐述代码逻辑。
4. 自我修复能力强:包含完善的异常捕获机制,可处理连接失败、客户端异常断开等情况;设置端口复用,避免端口占用导致的程序报错,确保实验顺利进行。
5. 轻量易运行:仅依赖 Python 内置库(socket、threading、tkinter),无需安装第三方依赖,复制代码即可直接运行,跨平台适配 Windows、macOS 等系统,无需额外配置实验环境。
6. 贴合实验需求:完整覆盖 TCP 通信的核心流程(监听、连接、收发消息、断开连接),可直接用于验证 TCP 协议的通信原理,满足实验核心要求。
(老师俺真的不知道咋描述所以借助ai求大发慈悲放过TT)
3. 实验过程中遇到的问题和解决过程
- 问题1:明明修改好了ip地址也填的同一地址,但是报错
- 问题1解决方案:发现是网络自动连接到别的热点了,修改回同一热点后正常
- 问题2:ip地址改后报错无法运行
- 问题2解决方案:打开cmd输ipconfig获取现在的网址开头再改
其他(感悟、思考等)
4. 实验感悟
这次实验真的可以说是最近几次里最难的一次吧。刚开始做的时候,对着IP地址、端口号一头雾水,老是连不上、一直报错,我和队友反复检查代码、切换热点、重新改地址,同样的流程重复折腾了好几次都失败,真的快崩溃了,不过好在最后请教同学最后也是成功通信了,当看到客户端和服务端终于能互相收发消息的时候,激动得不行特别有成就感,也明白了网络通信原来就是这么一回事,没想象中那么遥不可及。
后来用大模型生成带图形界面的程序,更是打开了新世界的大门,运行出来的那一刻特别惊喜。整个实验下来,我不仅学会了Socket通信的基础用法,还体会到了一步步排查解决的踏实感。
从一开始的手忙脚乱,到最后顺利完成所有要求,我越来越意识到遇到问题真的不能慌,先自己检查,实在检查不出来问AI,最后老师同学,办法总比困难多,保持好心态即使是我这种什么都不会的文科生也可以编程运行。
浙公网安备 33010602011771号