20252217贾子墨 实验三 《Python程序设计》实验报告

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

课程:《Python程序设计》
班级:2522
姓名:贾子墨
学号:20252217
实验教师:王志强
实验日期:2026年4月27日
必修/选修:公选课


1. 实验内容

创建服务端和客户端,服务端在特定端口监听多个客户请求。客户端和服务端通过Socket套接字(TCP/UDP)进行通信。

具体要求

要求1:

(1)创建服务端和客户端,选择一个通信端口,用Python语言编程实现通信演示程序;

(2)要求发送方输入内容,加密后并传输;接收方收到密文并解密和显示。要求:发方和收方同时输出明文和明文。

(3)程序代码托管到码云。

(4)添加文件操作,有加分。(可选项)

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

(1)分析关键代码的功能和使用方法

(2)分析生成程序的优点

(3)给出运行过程和结果截图

(4)程序代码托管到码云。


2. 实验过程及结果

2.1 基础通信实现(TCP协议)

首先实现了基于TCP协议的一问一答通信功能,我先后扮演了服务端和客户端进行测试。

作为服务端:

运行界面如下图所示:

image

服务端代码如下:

image

作为客户端:

运行界面如下图所示:

image

客户端代码如下:

image

基础通信功能正常,能够实现简单的对话交互。


2.2 加密传输实现

在基础通信之上增加了加密功能。共尝试了两种加密方式。

(1)初级版本——凯撒移位加密

采用凯撒移位加密方式,对每个字符的ASCII码进行偏移(+3加密,-3解密)。该方式实现简单,加密强度较低,但能够满足实验对加密传输的基本要求。

服务端程序:

image

客户端程序:

image

image

运行结果截图:

3ad1e80a11dff812e663aa446a945d32

b6e432003cffc508c765a4c6f2d390b7

(2)高级版本——XOR异或加密(用LLM生成带图形界面程序使用,运行截图与代码见2.3)

在图形界面版本中,采用了XOR异或加密方式,密钥为0x55。每个字节与密钥进行异或运算,加解密使用同一操作(异或两次可还原)。相比凯撒移位,XOR加密强度更高。

两种加密方式均实现了发送方加密、接收方解密的功能,双方同时输出明文和密文。加密通信要求已满足。


2.3 LLM生成图形界面程序

使用LLM生成了一个带图形界面的聊天程序,采用XOR加密协议。服务端负责消息中转,客户端之间可自由通信。

服务端程序:

image

image

image

image

image
代码有点多。。。。。。

代码功能分析:使用socket.socket()创建套接字,绑定IP和端口后监听连接;通过threading模块实现多线程处理,确保界面不阻塞;使用scrolledtext.ScrolledText组件显示聊天记录;加密方式为XOR异或。

客户端程序:

image

image

image

image

image

客户端代码结构与服务端对称,主要功能包括连接服务端、发送加密消息、接收并解密显示。

运行结果截图:

cd5cc620589555cc70b8869c09935b08

3bf4738d4cd8ff12858b3cb1182b1fb5

分析与总结:

关键代码功能:

socket通信:通过TCP协议在网络上建立连接,让服务端和客户端像打电话一样互相传输数据。
XOR加密/解密:用固定密钥(0x55)对每个字节进行异或运算,加密和解密使用同一操作,原理简单但是安全性较低。
多线程处理:主线程负责GUI(图形用户界面)响应,子线程负责网络收发,避免聊天时界面卡顿,实现流畅的双向通信。
补一个前端UI的介绍:image
Tkinter图形界面:是Python自带的GUI库,创建窗口、按钮、文本框等可视组件,让用户通过点击和输入操作程序,无需命令行。

主要优点:

(1).用户体验友好:
连接前禁用发送按钮,可以防止用户端或者服务端的误操作
支持回车键快速发送消息
窗口关闭时能够优雅地自动断开连接
(2).容错处理完善
端口设置了输入验证,可以防止类型错误
接收解密异常不会导致程序崩溃
(3).状态管理清晰
通过红/绿灯提示让连接状态实时可视化

代码已托管至码云,见我的gitee库

(会跳转至手写服务端代码文件,其余文件均在旁边的文件列表中)


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

  • 问题1:初次了解socket编程,对TCP协议的服务端和客户端工作流程不熟悉,并对socket函数具体功能不了解
    解决方案:利用deep seek、豆包等AI工具,先实现最简单的一问一答功能,逐步理解socket.bind()socket.listen()socket.accept()等方法的调用顺序和作用。

  • 问题2:加密通信中,服务端和客户端使用的加密算法不一致,导致解密失败
    解决方案:统一双方加密方式,确保使用相同的密钥和加密逻辑。本次实验中,初级版本统一使用凯撒移位(+3/-3),高级版本统一使用XOR异或(KEY=0x55)。

  • 问题3:程序在不同设备上运行时,IP地址和端口号需要手动修改,不够灵活
    解决方案:将IP和端口作为变量提取到代码开头,或通过配置文件读取,便于在不同网络环境下快速调整。


4. 其他(感悟、思考等)

通过本次实验,我对Socket编程的基本流程有了更清晰的认识,包括TCP协议下的连接建立、数据传输和连接释放。从最初的自问自答(doge),到加密传输,再到带图形界面的聊天程序,每一步都加深了对网络通信的理解。

在加密部分,我借助AI尝试了凯撒移位和XOR异或两种方式。凯撒移位实现简单,适合快速理解加密流程;XOR异或效率较高且加解密使用同一操作,感觉自己现在还理解不了。对于更复杂的加密算法,未来如果有坤会可以进一步探索(一定会有的)。

同时图形界面版本的实现让我体会到,一个效果良好的交互设计能够有效改善别人使用时候的心情。通过LLM辅助生成代码,也让我感受到了AI工具在学习和开发中的实际价值——但前提是自己能够理解代码的逻辑,否则无法调试和修改。


5. 参考资料

-我的gitee库
(会跳转至手写服务端代码文件,其余文件均在旁边的文件列表中)

-python中的socket模块

posted @ 2026-04-28 15:14  paradissse  阅读(29)  评论(2)    收藏  举报