20242309实验三《Python程序设计》实验报告
20242309 2024-2025-2 《Python程序设计》实验三报告
课程:《Python程序设计》
班级:2423
姓名: 邱贤达
学号:20242309
实验教师:王志强
实验日期:2025年4月16日
必修/选修: 公选课
一、实验内容
(1)创建服务端和客户端,选择一个通信端口,用Python语言编程实现通信演示程序;
(2)要求包含文件的基本操作,例如打开和读写操作。
(3)要求发送方从文件读取内容,加密后并传输;接收方收到密文并解密,保存在文件中。
(4)程序代码托管到码云。
二、实验过程
(一)功能分析
根据实验要求,我设计的通信工具代码具有以下功能:
-
客户端打开“input.txt"文件,读入后进行凯撒加密,位移为3。
-
客户端将数据发送给服务器,服务器接受数据。
-
服务器将数据进行解密,解密后输出到“output.txt"文件。
(二)实验代码
-
客户端:
-
import socket def enco(line): # 使用凯撒密码加密 result = "" for i in line: if i.isalpha(): if i.isupper(): result += chr((ord(i) - 65 + 3) % 26 + 65) else: result += chr((ord(i) - 97 + 3) % 26 + 97) else: result += i return result client_s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client_s.connect(('localhost', 9999)) f = open("input.txt", "r") content = f.read() client_s.send(enco(content).encode('utf-8')) -
服务器:
-
import socket def deco(line): # 使用凯撒密码解密 result = "" for i in line: if i.isalpha(): if i.isupper(): result += chr((ord(i) - 65 - 3) % 26 + 65) else: result += chr((ord(i) - 97 - 3) % 26 + 97) else: result += i return result s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) address = ('localhost', 9999) s.bind(address) s.listen(5) clent_s, address = s.accept() print("我们收到了{}连接".format(address)) while True: data = clent_s.recv(1024) print("接收到数据:", data.decode('utf-8')) if not data: break with open("output.txt", "w") as f: f.write(deco(data.decode('utf-8')))
(三)代码托管到码云
三、实验结果
运行sever.py后运行client.py,两个文件和两个终端效果如下


client.py终端无输出
四、结果分析
运行sever.py后服务器开始监听,再运行client.py后先建立与服务器的连接,再读入input.txt文件并加密,最后发送给服务器。服务器收到后解密再写入output.txt文件。
五、实验过程中遇到的问题和解决过程
- 问题1:即使在一个文件夹内输入输出文件也有可能打不开。
![]()
- 问题1解决方案:在vs code中要打开源代码所在的文件夹,才能找到同目录下的文件。
- 问题2:如果文本较大无法一次性全部读入输出,后面输出的会覆盖前面的。
- 问题2解决方案:查阅资料,发现可以使用
a模式追加。
六、感悟
- 本次实验调用了很多之前积累的密码学知识,锻炼了我的综合能力。勤于练习方能熟练掌握。


浙公网安备 33010602011771号