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

20252435 实验三《Python程序设计》实验报告

20252435 2025-2026-2 《Python程序设计》实验三报告

课程:《Python程序设计》
班级:2524
姓名:赵振为
学号:20252435
实验教师:王志强
实验日期:2026年5月12日
必修/选修:公选课

合作队友:20252307 万书林


1. 实验内容

本次实验基于Socket编程技术,实现客户端与服务端的加密通信,并完成代码托管与跨平台运行。具体包括:

  1. 基础加密通信:使用Python TCP Socket,客户端发送前加密,服务端接收后解密,双方同时输出明文和密文。
  2. 文件操作(加分项):客户端读取本地文件内容,加密后传输;服务端解密并保存为新文件。
  3. LLM生成GUI程序:利用大语言模型生成带图形界面的加密传输程序,分析其结构、优点,并给出运行结果。
  4. 代码托管:将程序代码上传至码云(Gitee),并在华为ECS(OpenEuler)和本地Windows双平台运行验证。

2. 实验过程及结果

2.1 要求1:手动编写加密通信程序(含文件操作)

设计思路

  • 加密算法:采用异或(XOR)加密,密钥为固定字节值,加解密使用同一函数。

  • 服务端:绑定本地端口,接收客户端连接后持续接收密文,解密后打印明文,并回复确认信息。
    f6d506d9972800d08518194d3b1e9b28

  • 客户端:连接服务端后,支持两种模式——键盘输入模式和文件传输模式。
    a4d6eb5ac8b43c728256318dcc039cf2

  • 文件操作:服务端将解密后的内容追加保存到本地文件中。

运行结果

  • 客户端终端显示:连接成功后显示提示信息,发送时同时输出明文和对应的密文(十六进制形式),发送完成后显示确认信息。
  • 服务端终端显示:显示客户端地址、收到的密文(hex形式)以及解密后的明文内容。
  • 文件验证:服务端自动生成接收文件,内容与客户端发送的源文件完全一致。

2.2 要求2:LLM生成图形界面程序

提示词内容

要求大语言模型生成一个基于sockettkinter的图形界面程序,客户端可选择文件并加密发送,服务端实时显示连接状态、解密并自动保存,需包含异常处理和粘包问题解决方案。

关键功能及使用方法

关键功能分析

功能模块 实现方式 作用
加密传输 XOR异或加密,加解密合一 保证数据传输的机密性
粘包处理 先发送文件长度再发送内容 解决TCP流式传输数据边界问题
多线程 服务端监听放在子线程中运行 避免阻塞主界面,保持GUI响应
日志队列 使用队列传递日志消息 线程安全地更新UI显示
文件保存 服务端按原文件名保存 方便对比验证

使用方法

  1. 运行服务端GUI程序,点击"启动服务"按钮
  2. 运行客户端GUI程序,点击"选择文件"按钮选中待发送文件
  3. 点击"发送并加密传输"按钮完成传输
  4. 服务端自动解密并保存文件,日志区显示操作记录

生成程序的优点

  1. 可视化操作:无需命令行输入,文件选择通过对话框完成,适合非技术用户使用
  2. 线程分离:网络监听在后台线程运行,界面始终保持响应,不会出现"未响应"状态
  3. 完整性处理:采用"长度+内容"方式彻底解决TCP粘包问题,支持任意大小文件
  4. 日志窗口:实时显示连接状态、收发包进度、报错信息,便于调试和问题定位
  5. 异常处理完善:包含端口占用、连接失败、文件不存在等常见异常捕获
  6. 可扩展性强:加密函数独立封装,可方便替换为AES、DES等更复杂算法

运行结果

  • 服务端GUI:启动后显示服务启动状态,收到文件后提示解密成功及保存路径
  • 客户端GUI:界面包含文件选择按钮和发送按钮,选择文件后显示文件路径和大小,发送成功后弹出成功提示框

2.3 码云代码托管

代码已上传至码云(Gitee)个人仓库,仓库中包含手动编写的服务端、客户端程序,以及LLM生成的GUI版本程序。

托管截图如下:

码云托管截图


2.4 跨平台运行

平台 角色 运行情况
华为ECS (OpenEuler 22.03) 服务端 正常运行,需开放防火墙端口
Windows 11 客户端 正常运行,连接云服务器公网IP成功
Windows 11 服务端 正常运行,需配置防火墙入站规则
Ubuntu 22.04 客户端 正常运行

双平台通信验证:云服务器运行服务端,本地Windows运行客户端,填入服务器公网IP和端口后成功建立通信并进行加密文件传输,验证了跨网络、跨操作系统的Socket通信能力。


3. 实验过程中遇到的问题和解决过程

  • 问题1:原始服务端代码缺少发送回复逻辑,导致只能单向通信

    • 解决方案:在服务端接收数据后添加发送确认信息的代码,客户端对应增加接收逻辑,实现双向交互
  • 问题2:异或加密后二进制文件(如图片)解密后损坏

    • 解决方案:文件读写全程使用二进制模式,不对解密结果做字符串解码,仅对文本文件展示明文内容
  • 问题3:与队友联调时公网IP连接失败

    • 解决方案:检查云服务器安全组规则确认端口已开放,服务端绑定0.0.0.0而非127.0.0.1以允许外部连接

其他(感悟、思考等)

通过本次实验,我深刻理解了Socket编程中"TCP是流协议"的含义——它不保留消息边界,需要应用层自行设计分包协议。加密传输、文件操作、GUI多线程等技术的综合应用让我对Python网络编程有了更全面的认识。

和队友万书林进行联调测试时,我们分别扮演服务端和客户端,反复测试大文件、中文内容、异常退出等边界情况,真正体会到了结对编程的价值——两个人互相审查代码、交替测试,显著降低了bug率。

对于LLM生成代码,我的态度是:它擅长快速搭建程序框架,节省查阅文档的时间,但在线程安全、资源释放、数据完整性等细节上仍需人工审查与测试。本次实验中LLM生成的GUI代码确实提高了开发效率,但粘包处理的细节需要手动修正完善。未来我会继续借助LLM辅助编程,但不会盲目信任,始终保持对底层原理的理解。

此外,在华为云与本机的跨平台实验中,我复习了Linux防火墙配置和Windows入站规则配置,这对今后部署真实网络应用非常有帮助。


参考资料

  • 《Python网络编程第三版》
  • 码云Gitee帮助文档:https://gitee.com/help
http://www.jsqmd.com/news/710730/

相关文章:

  • 2026年补锌行业报告-赖氨葡锌颗粒行业头部企业排名出炉_补锌品牌 - 资讯焦点
  • 多模态大语言模型的搜索增强技术与实践
  • 如何在2026年继续畅玩经典Flash游戏:CefFlashBrowser完全指南
  • 万方 AIGC 率 60% 降到 5%!0ailv 一键帮毕业生过万方 AIGC 检测! - 我要发一区
  • 蓝凌OA管理员自查指南:这几个未授权接口和配置项,你的系统可能还没修复
  • 基于多任务学习的幽默理解系统设计与优化
  • 别再只用来重放请求了!BurpSuite Repeater的5个隐藏技巧与高效工作流
  • Agent与Workflow自动化架构对比与混合实践
  • 为本地大模型注入联网与工具调用能力:MCP服务器实战指南
  • 手把手调试:基于STM32和DW1000的DS-TWR测距代码详解与避坑
  • 别再只把树莓派当电脑用了!GPIO引脚实战:用Python点亮LED并理解SPI通信基础
  • 给嵌入式新人的AutoSAR入门指南:从分层架构到实战工具链(附经典控制器案例)
  • 如何快速获取离线小说:Tomato-Novel-Downloader完整指南
  • 维普 AIGC 率 55% 降到 8%!率零一键帮毕业生过维普 AIGC 检测! - 我要发一区
  • 扩散模型与大语言模型融合的强化学习优化框架
  • 别再手动处理MRI数据了!用Freesurfer 7.2.0一键完成皮层重建(Ubuntu 20.04保姆级教程)
  • 别再全网找答案了!一招解决Python 3.10下tornado/collections.MutableMapping报错
  • 给甲方看方案别再发SU文件了!手把手教你用Enscape导出独立可执行文件(EXE/Web版)
  • NoFences:三分钟搞定Windows桌面混乱的终极分区方案
  • DBLens for PostgreSQL 正式发布|把 PostgreSQL 开发与管理带进 AI + Agent 时代
  • 告别集中式服务器:深入解读Kimera-Multi的分布式GNC算法如何实现高效鲁棒的多机SLAM
  • 成本与性能的平衡术:在STM32上实现LIN从机节点的三种硬件方案对比(UART+Timer vs. 专用外设)
  • Treap
  • STM32外部Flash编程与Keil MDK算法开发指南
  • FPGA实现低温探测器DAQ系统的数字仿真方案
  • 别再死记硬背了!一张图帮你理清线性方程组‘有解无解’的所有情况
  • 409.blog更新日志 发展计划
  • go: Registry Pattern
  • 零依赖原生JS实现:在VS Code中构建极简游戏扩展的架构与实战
  • 3个步骤让你在电脑上玩Switch游戏:Ryujinx模拟器完全指南