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

课程:《Python程序设计》
班级: 2422
姓名: 周侯妤
学号:20242221
实验教师:王志强
实验日期:2025年4月16日
必修/选修: 公选课

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

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

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

(4)程序代码托管到码云。
2. 实验过程及结果
(1)分别编写客户端和服务端Python程序
客户端核心代码:

import socket

client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_address = ('192.168.31.86', 1234) 
client_socket.connect(server_address)

while True:
    message = input('客户端输入: ')
    client_socket.send(message.encode('utf-8'))
    
    data = client_socket.recv(1024).decode('utf-8')
    print('服务端回复:', data)
    
    if message.lower() == 'exit':
        break

client_socket.close()

服务端核心代码:

import socket

server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_address = ('192.168.31.86', 1234)
server_socket.bind(server_address)
server_socket.listen(1)

client_socket, client_address = server_socket.accept()

while True:
    data = client_socket.recv(1024).decode('utf-8')
    print('客户端消息:', data)
    
    response = input('服务端输入: ')
    client_socket.send(response.encode('utf-8'))
    
    if data.lower() == 'exit':
        break

client_socket.close()
server_socket.close()

成功建立客户端与服务端的连接,实现双向实时通信。



(2)实现文件操作功能
在基础通信程序上扩展文件操作功能,设计"file:read [路径]"和"file:write [路径] [内容]"指令格式,客户端和服务端分别实现文件读写逻辑,添加异常处理机制。
核心代码。实现了完整的文件操作命令集,支持以下功能:文件读取(file:read [path]);文件写入(file:write [path] [content]);文件追加(file:append [path] [content]);文件删除(file:delete [path])
客户端文件处理部分:

if data.lower().startswith("file:"):
    command = data.split(":")[1].strip()
    if command.startswith("read"):
        try:
            with open(command.split()[1], 'r') as f:
                print(f.read())
        except Exception as e:
            print("文件错误:", e)

服务端文件处理部分:

if data.lower().startswith("file:"):
    command = data.split(":")[1].strip()
    if command.startswith("read"):
        try:
            with open(command.split()[1], 'r') as f:
                print(f.read())
        except Exception as e:
            print("文件错误:", e)```
成功实现通过指令进行文件读写操作。
(3)实现加密传输功能
实现凯撒加密算法(位移3位),客户端读取文件后先加密再发送,服务端接收后先解密再保存,验证加解密过程的正确性。
加密函数:
```python
def encrypt(text, shift=3):
    result = ""
    for char in text:
        if char.isalpha():
            base = ord('a') if char.islower() else ord('A')
            result += chr((ord(char) - base + shift) % 26 + base)
        else:
            result += char
    return result

解密函数

def decrypt(text, shift=3):
    return encrypt(text, -shift)```
加密传输流程:
```python
# 客户端发送加密文件
with open('secret.txt', 'r') as f:
    encrypted = encrypt(f.read())
    client_socket.send(encrypted.encode())

服务端接收解密

data = client_socket.recv(1024).decode()
decrypted = decrypt(data)
with open('received.txt', 'w') as f:
    f.write(decrypted)

(4)传输到git库

3. 实验过程中遇到的问题和解决过程
问题1:加密解密时出现密钥不匹配错误
解决方案:确保服务端生成的密钥正确保存到文件,并且客户端能够正确读取该密钥文件
4.其他(感悟、思考等)
通过本次实验,我深入理解了Socket编程的基本原理和实现方法。加密传输的实现让我认识到网络安全的重要性。多线程处理客户端请求也让我对并发编程有了更直观的认识。

posted @ 2025-04-21 18:55  yuthinking  阅读(45)  评论(0)    收藏  举报