20241105 王梓墨 实验三 《Python程序设计》实验报告
课程:《Python程序设计》
班级: 2411
姓名: 王梓墨
学号:20241105
实验教师:王志强
实验日期:2025年4月16日
必修/选修: 公选课
1.实验内容
(1)创建服务端和客户端,选择一个通信端口,用Python语言编程实现通信演示程序;
(2)要求包含文件的基本操作,例如打开和读写操作。
(3)要求发送方从文件读取内容,加密后并传输;接收方收到密文并解密,保存在文件中。
(4)程序代码托管到码云。
2. 实验过程及结果
在使用socket的过程中,我根据老师在课堂上讲的对客户端和服务端代码的实现,在尝试了许多次后,终于完成了对于信息的传递
(1)首先我简单使用了客户端与服务端的连接工作
(2)其次,在加密过程中,因为一些问题,使用了凯撒加密
3.实验代码
(1)客户端

在上面的代码中,首先由钧涛创建了一个socket对象,并获取了我的电脑ip
`import socket
新建Socket,实例化
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
连接服务器
client_socket.connect(('192.168.25.199', 9999))
client_socket.connect(('localhost', 9999))
while True:
client_socket.send(input("客户端说:").encode("utf-8"))
data = client_socket.recv(1024)
print("服务端回答:",data.decode("utf-8"))
client_socket.close()(2)服务端  address = ('localhost', 9999)在写服务端代码时因为疏忽多写了这一行代码,导致程序无法运行import socket
创建一个TCP/IP套接字对象
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
定义服务器要绑定的地址和端口
address = ('192.168.25.199', 9999)
将套接字绑定到指定的地址和端口
server_socket.bind(address)
开始监听客户端连接,最大连接数为1
server_socket.listen(1)
print("开始监听....")
接受客户端的连接请求,返回一个新的套接字对象和客户端地址
client_socket, address = server_socket.accept()
print("我们收到{}的连接".format(address))
while True:
接收客户端发送的数据,最大接收1024字节
data = client_socket.recv(1024)
if not data:
如果没有接收到数据,说明客户端关闭了连接,退出循环
break
print("客户端说:{}".format(data.decode("utf-8")))
服务器输入回应内容并发送给客户端
client_socket.send(input("服务端回应:").encode("utf-8"))
关闭与客户端的连接
client_socket.close()结果如下:  4.加密    在使用Aes加密的过程中,需要下载Crypto模板,其中的一些代码经过ai的帮助成功的实现了,只是不知为何在我的电脑上始终无法实现pip下载,在改变环境变量后,仍无法完成,在重装python后仍然无法解决,因此我们就将加密方向转为比较简单的凯撒加密,通过移位实现简单的加密 (1)客户端    import socket
凯撒加密函数
def caesar_encrypt(message, shift=3):
result = ""
for char in message:
if char.isalpha():
if char.islower():
result += chr((ord(char) - ord('a') + shift) % 26 + ord('a'))
else:
result += chr((ord(char) - ord('A') + shift) % 26 + ord('A'))
else:
result += char
return result
凯撒解密函数
def caesar_decrypt(message, shift=3):
return caesar_encrypt(message, -shift)
创建socket对象
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
连接服务器
server_address = ('192.168.25.199', 9998)
client_socket.connect(server_address)
while True:
输入消息
message = input('客户端输入: ')
计算加密后的消息
encrypted_message = caesar_encrypt(message)
发送加密后的消息长度
client_socket.send(len(encrypted_message).to_bytes(4, 'big'))
发送加密后的消息
client_socket.send(encrypted_message.encode('utf-8'))
接收服务器发送的消息长度
message_length_bytes = client_socket.recv(4)
if not message_length_bytes:
break
message_length = int.from_bytes(message_length_bytes, 'big')
接收服务器发送的加密消息
encrypted_response = b''
received_length = 0
while received_length < message_length:
chunk = client_socket.recv(min(1024, message_length - received_length))
if not chunk:
break
encrypted_response += chunk
received_length += len(chunk)
解密服务器发送的消息
decrypted_response = caesar_decrypt(encrypted_response.decode('utf-8'))
print(f'服务器: {decrypted_response}')
关闭连接
client_socket.close()
`
(2)服务端





结果如下:

5.实验过程中遇到的问题和解决过程
- 问题1:在连接过程中遇到积极拒绝连接的问题
- 问题1解决方案:向老师寻求帮助
- 问题2:我的电脑不能使用pip安装Crypto模板
- 问题2解决方案:寻求了AI的帮助,通过添加路径解决
6.感悟与思考
仅仅通过几行代码,就能够实现服务端与客户端的连接,感受到了编程的神奇,领会到了代码改变世界
7.参考资料
零基础学Python
浙公网安备 33010602011771号