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

20242309 2024-2025-2 《Python程序设计》实验三报告

课程:《Python程序设计》

班级:2423

姓名: 邱贤达

学号:20242309

实验教师:王志强

实验日期:2025年4月16日

必修/选修: 公选课

一、实验内容

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

(2)要求包含文件的基本操作,例如打开和读写操作。

(3)要求发送方从文件读取内容,加密后并传输;接收方收到密文并解密,保存在文件中。

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

二、实验过程

(一)功能分析

根据实验要求,我设计的通信工具代码具有以下功能:

  1. 客户端打开“input.txt"文件,读入后进行凯撒加密,位移为3。

  2. 客户端将数据发送给服务器,服务器接受数据。

  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')))
    

(三)代码托管到码云

魏智/Python程序设计课

三、实验结果

运行sever.py后运行client.py,两个文件和两个终端效果如下


client.py终端无输出

四、结果分析

运行sever.py后服务器开始监听,再运行client.py后先建立与服务器的连接,再读入input.txt文件并加密,最后发送给服务器。服务器收到后解密再写入output.txt文件。

五、实验过程中遇到的问题和解决过程

  • 问题1:即使在一个文件夹内输入输出文件也有可能打不开。
  • 问题1解决方案:在vs code中要打开源代码所在的文件夹,才能找到同目录下的文件。
  • 问题2:如果文本较大无法一次性全部读入输出,后面输出的会覆盖前面的。
  • 问题2解决方案:查阅资料,发现可以使用a模式追加。

六、感悟

  • 本次实验调用了很多之前积累的密码学知识,锻炼了我的综合能力。勤于练习方能熟练掌握。
posted @ 2025-04-23 19:59  未知,  阅读(44)  评论(0)    收藏  举报