20243222 实验三《Python程序设计》实验报告
20243222 2025-2026-2 《Python程序设计》实验三报告
课程:《Python程序设计》
班级: 2432
姓名: 杨婕
学号:20243222
实验教师:王志强
实验日期:2026年5月10日
必修/选修: 公选课
1.实验内容
创建服务端和客户端,服务端在特定端口监听多个客户请求。客户端和服务端通过Socket套接字(TCP/UDP)进行通信。
内容1:
(1)创建服务端和客户端,选择一个通信端口,用Python语言编程实现通信演示程序;
(2)要求发送方输入内容,加密后并传输;接收方收到密文并解密和显示。要求:发方和收方同时输出明文和明文。
(3)程序代码托管到码云。
(4)添加文件操作,有加分。(可选项)
内容2:使用LLM生成一个带图形界面的程序
(1)分析关键代码的功能和使用方法
(2)分析生成程序的优点
(3)给出运行过程和结果截图
(4)程序代码托管到码云。
2. 实验过程及结果
一、自己编写服务端和客户端加密通信程序
(1)我作为服务端进行通信测试
在本次实验中,我首先编写并运行了服务端程序。服务端程序的主要作用是绑定本机IP地址和指定端口,并在该端口上等待客户端连接。当客户端连接成功后,服务端可以接收客户端发送的加密消息,并对密文进行解密,最终显示解密后的明文内容。
服务端程序的大致运行流程如下:
1.创建Socket对象;
2.绑定本机IP地址和端口号;
3.调用监听方法,等待客户端连接;
4.接收客户端发送的密文数据;
5.对接收到的密文进行解密;
6.在控制台输出密文和解密后的明文;
7.根据需要继续接收或发送消息。
运行服务端程序后,程序进入监听状态,等待客户端连接。连接建立后,服务端能够正常接收客户端发送的数据,并完成解密显示。
服务端运行截图如下:



通过运行结果可以看出,服务端能够成功启动并监听端口,客户端连接后可以完成消息接收。接收数据时,程序能够显示通信过程中的密文和明文,符合实验中对加密传输的要求。
(2)我作为客户端进行通信测试
客户端程序的主要作用是主动连接服务端,并向服务端发送消息。客户端输入明文消息后,程序会先对消息内容进行加密,然后将加密后的密文通过Socket发送到服务端。服务端接收到密文后再进行解密。
客户端程序的大致运行流程如下:
1.创建Socket对象;
2.设置服务端IP地址和端口号;
3.主动连接服务端;
4.输入需要发送的明文内容;
5.对明文进行加密;
6.发送密文数据;
7.输出发送前的明文和加密后的密文。
在运行过程中,我作为客户端输入消息,程序能够将明文转换为密文后发送给服务端。服务端收到消息后也能够成功解密,说明客户端和服务端之间的通信过程正常。
客户端运行截图如下:



通过客户端运行结果可以看出,客户端能够成功连接服务端,并完成加密消息发送。发送前后分别显示明文和密文,能够较直观地体现“明文输入—加密传输—解密显示”的完整过程。
(3)加密通信过程分析
本次实验的重点之一是实现加密传输。普通Socket通信中,如果直接发送明文,通信内容在传输过程中容易被直接读取,不够安全。因此,本实验在发送消息前增加了加密步骤。
基本通信逻辑如下:
1.发送方输入原始消息,即明文;
2.程序使用加密算法将明文转换为密文;
3.发送方通过 Socket 发送密文;
4.接收方接收到密文;
5.接收方使用相同的密钥和解密方法还原明文;
6.接收方输出密文和解密后的明文。
通过这种方式,实际在网络中传输的是密文,而不是直接传输明文。即使传输内容被截获,也不能直接看出原始消息内容。这让我对网络通信中的数据安全有了更直观的认识。
(4)代码托管
完成服务端和客户端程序编写后,我将代码上传到了 Gitee 平台进行托管。代码托管的主要过程如下:
1.在本地确认服务端和客户端代码能够正常运行;
2.将代码文件添加到 Git 管理中;
3.提交代码并填写提交说明;
4.将本地代码推送到 Gitee 远程仓库;
5.在 Gitee 页面检查代码是否上传成功。
代码托管结果截图如下:


二、使用LLM生成带图形界面的加密通信程序
(1)LLM生成程序的基本情况
在完成自己编写的命令行版本服务端和客户端程序后,我又使用 LLM 生成了一个带图形界面的加密通信程序。相比命令行程序,图形界面程序能够通过窗口、按钮、输入框和日志显示区域完成交互,操作更加直观。
LLM 生成的程序主要包含以下功能:
1.图形化显示通信界面;
2.支持服务端启动监听;
3.支持客户端连接服务端;
4.支持输入明文消息并发送;
5.支持 DES 加密和解密;
6.支持显示明文、密文和通信日志;
7.支持多线程运行,避免界面卡顿;
8.支持日志记录功能。
(2)关键代码功能与使用方法分析
1.DES加解密模块:采用DES‑ECB对称加密,8字节固定密钥,通过encrypt()加密、decrypt()解密,Base64编码防止传输乱码。使用方法:收发消息前调用对应函数加解密,两端密钥保持一致。
2.TCP通信模块:服务端绑定IP端口并监听,客户端主动建立连接;send()发送密文,recv()接收数据。使用方法:先启动服务端监听,再运行客户端连接,实现双向通信。
3.多线程模块:使用子线程处理连接等待、消息接收,主线程负责界面交互,避免窗口卡顿。使用方法:后台运行网络任务,不影响GUI正常操作。
4.图形界面模块:包含日志显示框、消息输入框、功能按钮,实时展示明文、密文与时间。使用方法:点击按钮启动服务 / 连接,输入消息即可发送。
5.日志模块:自动添加时间戳,在界面实时记录通信信息,便于查看通信过程。
(3)LLM 生成程序的优点分析
与我自己编写的命令行版本程序相比,LLM 生成的图形界面程序具有以下优点:
1.可视化程度更高
LLM 生成的程序带有图形界面,用户可以通过按钮和输入框完成操作,不需要完全依赖命令行输入。运行状态、发送内容、接收内容和加密结果都可以在界面中显示,观察起来更加直观。
2.交互体验更好
命令行程序通常需要根据提示输入内容,界面展示较为简单。而图形界面程序将不同功能分区显示,例如消息输入区、日志显示区和按钮操作区,使用起来更加方便,也更接近实际聊天软件的交互方式。
3.多线程设计更加合理
LLM 生成的程序使用子线程处理网络连接和消息接收,主线程负责界面显示。这样可以避免程序在等待连接或接收消息时出现界面卡顿,提高了程序运行的稳定性和流畅性。
4.加密通信过程展示更加完整
程序能够同时显示明文、密文和解密结果,使加密通信过程更加清楚。通过界面日志可以直观看到消息从明文变成密文,再由密文解密成明文的过程,符合本次实验的要求。
5.日志功能更加实用
LLM 生成的程序增加了日志显示或日志记录功能,可以记录通信过程中的重要信息。这样不仅方便观察实验结果,也方便在程序出现问题时进行排查。
6.代码结构相对完整
LLM 生成的程序通常会将加密、通信、界面和日志等功能进行模块化组织,代码结构相对清晰。对于初学者来说,这种代码有助于学习较完整项目的组织方式。
不过,LLM 生成的代码也需要自己认真阅读和测试。因为自动生成的代码不一定完全符合实验环境,例如 IP 地址、端口号、密钥设置、库安装情况等都可能需要根据实际情况修改。因此,LLM 更适合作为辅助工具,而不能完全替代自己对代码逻辑的理解。
(4)运行过程和截图
运行LLM生成的图形界面程序后,可以通过界面完成启动服务端、连接客户端、输入消息、发送消息和查看通信日志等操作。程序能够展示明文、密文和解密后的内容,说明加密通信功能能够正常运行。
运行截图如下:

通过运行结果可以看出LLM生成的程序能够较好地完成图形界面加密通信功能。相比命令行版本,图形界面版本的展示效果更加清楚,操作也更加方便。
(5)代码托管
LLM 生成的服务端和客户端代码也已经上传到 Gitee 平台进行托管。托管过程与自己编写代码的上传过程基本一致,主要包括本地提交和远程推送两个步骤。
代码托管结果截图如下:


3. 实验过程中遇到的问题和解决过程
- 问题1:两台电脑无法正常传送消息
在实验过程中,我和同学进行两台电脑之间的Socket通信测试时,出现了两台电脑无法正常传送消息的问题。程序本身可以运行,但是客户端与服务端之间无法建立正常通信,导致消息无法发送或接收。 - 问题1解决方案:刚开始我以为是代码中的通信逻辑出现了问题,于是检查了服务端监听端口、客户端连接端口以及加密和解密代码。后来询问老师后发现,问题主要与网络配置有关。根据老师的指导,我修改了网关地址,使两台电脑处于能够正常通信的网络环境中。修改后再次运行程序,客户端和服务端可以正常连接,消息也能够正常传输。相关修改截图如下:54ed14319fe61f60b863faeec85f8646
通过这个问题,我认识到Socket通信不仅与代码有关,也与网络环境密切相关。即使程序逻辑正确,如果IP地址、网关、防火墙或网络连接存在问题,客户端和服务端也可能无法正常通信。 - 问题2:服务端和客户端没有正常连接,程序刚运行就结束
在调试服务端和客户端程序时,还遇到了程序运行后很快结束,服务端和客户端没有正常连接,也无法发送消息的问题。 - 问题2解决方案:我逐行检查代码后发现,问题出在服务端和客户端的IP地址设置错误。客户端连接的IP地址与服务端实际监听的IP地址不一致,因此客户端无法连接到服务端。修改IP地址后,服务端能够正常进入监听状态,客户端也可以成功连接。
通过这个问题,我进一步理解了Socket通信中IP地址和端口号的重要性。服务端和客户端必须使用对应的IP地址和端口,通信才能正常建立。
其他(感悟、思考等)
本次Socket网络通信与加密传输实验让我对Python网络编程有了更直观的认识。之前在计算机网络课程中学习过IP地址、端口号、TCP连接等概念,但更多停留在理论层面。通过本次实验,我真正使用Python编写了服务端和客户端程序,并实现了两台电脑之间的通信,这让我对网络通信的过程有了更加具体的理解。
此外,本次实验也让我意识到,编程并不是只写代码,还需要考虑运行环境。两台电脑无法通信时,问题不一定在代码本身,也可能与IP地址、网关、防火墙或网络配置有关。排查这些问题的过程虽然比较繁琐,但也锻炼了我的分析能力和耐心。

浙公网安备 33010602011771号