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

20241319 2024-2025-2 《Python程序设计》实验二报告

课程:《Python程序设计》
班级: 2413
姓名: 吴辰曦
学号:20241319
实验教师:王志强
实验日期:2025年3月26日
必修/选修: 公选课

1.实验内容

(一)实验内容

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

(二)实验要求

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

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

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

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

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

2. 实验过程及结果

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

创建服务端:

点击查看代码
import socket
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
address = ('localhost', 8080)
#绑定
server_socket.bind(address)
#监听
server_socket.listen(5)
print("开始监听……",address)
#accept接收
client_socket,address = server_socket.accept()
print("我们收到了{}连接".format(address))

while(True):
    data = client_socket.recv(1024).decode("utf-8")
    if not data:
        break
    print("客户端说{}".format(data))
    client_socket.send(input("服务器回应:").encode("utf-8"))

client_socket.close()

创建客户端:

点击查看代码
import socket
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
address = ('localhost', 8080)
client_socket.connect(address)
while True:
    client_socket.send(input("客户端说:").encode("utf-8"))
    data=client_socket.recv(1024)
    print("服务端回答:",data.decode("utf-8"))

client_socket.close()

结果如图:

实验要求二、三:要求包含文件的基本操作,例如打开和读写操作。要求发送方从文件读取内容,加密后并传输;接收方收到密文并解密,保存在文件中。

服务端:

点击查看代码
import socket
from cryptography.fernet import Fernet
key=Fernet.generate_key()
print("生成的密钥:", key.decode("utf-8"))
fernet=Fernet(key)
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
address=('localhost', 8080)
#绑定
server_socket.bind(address)
#监听
server_socket.listen(5)
print("开始监听……",address)
#accept接收
client_socket,address=server_socket.accept()
print("我们收到了{}连接".format(address))
# 接收加密数据并解密
encrypted_data=client_socket.recv(1024)
decrypted_data=fernet.decrypt(encrypted_data).decode("utf-8")
print("收到的加密数据已解密:", decrypted_data)

file1=open("秘密","w")
file1.write(decrypted_data)
print("文件已保存至“秘密”")
file1.close()
client_socket.close()

客户端:

点击查看代码
import socket
from cryptography.fernet import Fernet
print("请输入从服务端获得的密钥")
key = input()
fernet = Fernet(key)
client_socket=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
address=('localhost', 8080)
client_socket.connect(address)
# 从文件中读取内容
file1=open("秘密","r")
data = file1.read()
print("从文件 '秘密' 读取的内容:", data)
file1.close()
# 加密数据
encrypted_data=fernet.encrypt(data.encode("utf-8"))
# 发送加密数据
client_socket.send(encrypted_data)
print("加密数据已发送到服务器")
client_socket.close()

结果如图:

要求四:代码上传码云访问我的码云

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

  • 问题1:cryptography库最初在pycharm中报错误
  • 问题1解决方案:经过一番重装后,发现可以正常使用(虽然仍然显示错误)

参考资料

posted @ 2025-04-23 20:31  20241319吴辰曦  阅读(15)  评论(0)    收藏  举报