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

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

课程:《Python程序设计》
班级:2423
姓名:万翔宇
学号:20242319
实验教师:王志强
实验日期:2025年4月16日
必修/选修:公选课

一.实验内容

  • 创建服务端和客户端,服务端在特定端口监听多个客户请求。客户端和服务端通过Socket套接字(TCP/UDP)进行通信。
    具体要求:
    1.创建服务端和客户端,选择一个通信端口,用Python语言编程实现通信演示程序;
    2.要求包含文件的基本操作,例如打开和读写操作。
    3.要求发送方从文件读取内容,加密后并传输;接收方收到密文并解密,保存在文件中。
    4.程序代码托管到码云。

注:在华为ECS服务器(OpenOuler系统)和物理机(Windows/Linux系统)上使用VIM、PDB、IDLE、Pycharm等工具编程实现。

二. 实验过程及结果

加密过程使用异或运算加密

(一)服务端

  • 服务端先绑定IP和端口,然后等待客户端发送信息

  • 接收到客户端的信息后,使用KEY解密密文并写入server.txt文本文件中

  • 向客户端答复“发送成功!”

服务端代码:

import socket

IP = '172.16.208.5'
PORT = 2025
KEY = b'123456'

server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind((IP,PORT))
server_socket.listen(5)
print("服务端",IP,"开始监听....")

while True:
    client_socket, client_address = server_socket.accept()
    print(f"我们收到来自{client_address}的连接")
    try:
        data = client_socket.recv(1024)
        with open('server.txt','wb') as f:
            f.write(bytes([b ^ KEY[i % len(KEY)] for i, b in enumerate(data)]))
        with open('server.txt','r') as f:
            content = f.read()
            print("接收内容:",content)
        response = "发送成功!"
        client_socket.send(response.encode('utf-8'))
    finally:
        client_socket.close()
        print("客户端已断开连接")

(二)客户端

  • 使用KEY对client.txt文本文件中的明文进行异或加密,并将密文发送给服务端

  • 当接收到服务端发送的“发送成功!”的信息时,表明密文成功发送

客户端代码:

import socket

IP = '172.16.208.5'
PORT = 2025
KEY = b'123456'

client_socket = socket.socket(socket.AF_INET,  socket.SOCK_STREAM)
client_socket.connect((IP,PORT))
with open('client.txt','rb') as f:
    message = f.read()
client_socket.send(bytes([b ^ KEY[i % len(KEY)] for i, b in enumerate(message)]))
response = client_socket.recv(1024)
print(response.decode('utf-8'))
client_socket.close()

(三)运行结果

  • 启动服务端

  • 在client.txt中输入要发送的明文

  • 客户端成功发送信息

  • 服务端成功接收信息


(四)程序代码托管到码云

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

  • 问题1:在客户端对明文进行异或运算加密时,程序报错,显示无法进行加密

  • 问题1解决方案:进行异或加密的对象是字节,在读取文件内容时不能用单纯'r',需使用'rb'读取二进制内容;在服务端读写的时候也同样需要注意使用'rb'和'wb'

  • 问题2:设置的KEY无法加解密文本内容

  • 问题2解决方案:KEY也需要使用字节格式对内容加解密,在KEY中加上b'...'即可

其他(感悟、思考等)

我明白了网络通信不再是虚无缥缈的概念,但无论如何,python太强大了!

Practice makes perfect!!!

😃

参考资料

posted @ 2025-04-19 10:03  小万万元  阅读(57)  评论(0)    收藏  举报