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

课程:《Python程序设计》
班级:2424
姓名:虎岳
学号:20242428
实验教师:王志强
实验日期:2025.4.16
必修/选修: 公选课
一.实验内容
创建服务端和客户端,服务端在特定端口监听多个客户请求。客户端和服务端通过Socket套接字(TCP/UDP)进行通信。
(1)创建服务端和客户端,选择一个通信端口,用Python语言编程实现通信演示程序;
(2)要求包含文件的基本操作,例如打开和读写操作。
(3)要求发送方从文件读取内容,加密后并传输;接收方收到密文并解密,保存在文件中。
(4)程序代码托管到码云。
二. 实验过程及结果
1、实验功能
(1)客户端进行加密并创建原文件,并将密文发送给服务端。
(2)服务端进行解密,并将解密的密文保存在新文件中。
(3)采用凯撒密码进行加密。
(4)可重复发送密文。
2、实验过程
(1)先参考老师的代码进行改进和同学一起实现客户端和服务端对话。
(2)通过询问deepseek文件写入读取相关知识完善代码使得程序可以写入并读取文件中的文本。
(3)通过询问deepseek得知凯撒加密的算法原理并在程序中加入函数。
(4)完善整个程序与同学进行对话。
(5)将代码托管到gitee。
3、实验结果截图





将代码托管到gitee


链接:https://gitee.com/Q1uShan233/qiushan
4、实验代码
(1)服务端:
import socket
def kaisa(text: str, shift: int) -> str:

encrypted = []
for char in text:
    if char.isupper():
        encrypted.append(chr((ord(char) - 65 + shift) % 26 + 65))
    elif char.islower():
        encrypted.append(chr((ord(char) - 97 + shift) % 26 + 97))
    else:
        encrypted.append(char)
return "".join(encrypted)

server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

address = ('localhost', 51792)

server_socket.bind(address)

server_socket.listen(5)
print("开始监听....",address)
shift=3
client_socket, address = server_socket.accept()
print("已和{}成功连接".format(address))
while True:
data = client_socket.recv(1024)
if not data:
print("无数据输入")
break
print("客户端说:{}".format(data.decode("utf-8")))
content=data.decode("utf-8")
decret=kaisa(content,shift)
with open('server.txt', 'w', encoding='utf-8') as file:
file.write(decret)

print("服务端回应")
client_socket.send(input("已接受,说说你想说的话吧").encode("utf-8"))

client_socket.close()
(2)客户端:
import socket
def kaisa(text: str, shift: int) -> str:

encrypted = []
for char in text:
    if char.isupper():
        encrypted.append(chr((ord(char) - 65 + shift) % 26 + 65))
    elif char.islower():
        encrypted.append(chr((ord(char) - 97 + shift) % 26 + 97))
    else:
        encrypted.append(char)
return "".join(encrypted)

client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

client_socket.connect(('127.0.0.1', 51792))
shift=3
while True:

with open('client.txt', 'w', encoding='utf-8') as file:
    file.write(input("请输入要加密的文字:\n"))

with open('client.txt', 'r', encoding='utf-8') as file:
    content = file.read()

client_socket.send(kaisa(content, shift).encode("utf-8"))

data = client_socket.recv(1024)
print("服务端回答:",data.decode("utf-8"))

client_socket.close()
三. 实验过程中遇到的问题和解决过程
1、应缩进问题导致的程序运行不下去
解决方法:问了ai很多次都无法找到问题,万难之际自己看了看,无意中按了下空格发现大堆报错,然后发现是缩进问题,遂改进。
2、byte类型和字符串类型混淆导致函数无法正常调用
解决方法:询问了deepseek后找到问题,将byte类型强制转化为字符串类型

posted @ 2025-05-14 20:49  丘山233  阅读(57)  评论(0)    收藏  举报