20241202王凯 实验三《Python程序设计》实验报告
------------恢复内容开始------------
课程:《Python程序设计》
班级: 2412
姓名: 王凯
学号:20241202
实验教师:王志强
实验日期:2025年4月16日
必修/选修: 公选课
1.实验内容
进行socket的学习,创建服务端和客户端,服务端在特定端口监听多个客户请求。客户端和服务端通过Socket套接字(TCP/UDP)进行通信;
2. 实验过程及结果
(1)进行socket的引入学习;

(2)创建服务端和客户端,选择一个通信端口,用Python语言编程实现通信演示程序(代码在下一部分);
下图为作为客户端和服务端的运行结果。(客户端与服务端地址都需输入服务端的,否则无法连接);


3.服务端代码
# 简单的解密函数(Caesar 密码)
def decrypt(text, shift):
return encrypt(text, -shift)
# 简单的加密函数(Caesar 密码)
def encrypt(text, shift):
result = ""
for char in text:
if char.isalpha():
start = ord('A') if char.isupper() else ord('a')
result += chr((ord(char) - start + shift) % 26 + start)
else:
result += char
return result
# 创建服务器 socket
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定地址和端口
server_address = ('192.168.30.2', 9999)
server_socket.bind(server_address)
# 监听连接
server_socket.listen(1)
print("等待客户端连接...")
client_socket, client_address = server_socket.accept()
print(f"客户端 {client_address} 已连接。")
# 接收加密内容
encrypted_content = client_socket.recv(4096).decode()
# 解密内容
shift = 3
decrypted_content = decrypt(encrypted_content, shift)
# 将解密后的内容保存到文件
try:
with open('output.txt', 'w') as file:
file.write(decrypted_content)
print("解密后的内容已保存到 output.txt。")
except Exception as e:
print(f"保存文件时出错: {e}")
# 关闭连接
client_socket.close()
server_socket.close()
4.客户端代码
'''使用凯撒密码加密'''
def encrypt(text, shift):
result = ""
for char in text:
if char.isalpha():
start = ord('A') if char.isupper() else ord('a')
result += chr((ord(char) - start + shift) % 26 + start)
else:
result += char
return result
'''读取文件内容'''
try:
with open('input.txt', 'r') as file:
content = file.read()
except FileNotFoundError:
print("文件未找到,请确保 input.txt 文件存在。")
exit()
'''加密内容'''
shift = 3
encrypted_content = encrypt(content, shift)
'''创建客户端 socket'''
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
'''连接服务器'''
server_address = ('192.168.30.2', 9999)
client_socket.connect(server_address)
'''发送加密内容'''
client_socket.send(encrypted_content.encode())
'''关闭连接'''
client_socket.close()
使用此客户端代码时,能进行解密,但无法进行通讯,如下图(服务器一端运行结果);


使用ai进行了一些修改,代码如下;
import socket
'''凯撒密码加密'''
def encrypt(text, shift):
result = ""
for char in text:
if char.isalpha():
start = ord('A') if char.isupper() else ord('a')
result += chr((ord(char) - start + shift) % 26 + start)
else:
result += char
return result
'''凯撒密码解密'''
def decrypt(text, shift):
return encrypt(text, -shift)
''' 新建服务端 socket'''
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
address = ('192.168.30.2', 9999)
'''绑定'''
server_socket.bind(address)
'''监听'''
server_socket.listen(5)
'''接受'''
client_socket, address = server_socket.accept()
print("我们收到了{}的链接".format(address))
shift = 3
while True:
encrypted_data = client_socket.recv(1024).decode()
if not encrypted_data:
break
decrypted_data = decrypt(encrypted_data, shift)
print("slave wk 说:{}".format(decrypted_data))
try:
with open('output.txt', 'a') as file:
file.write(decrypted_data + '\n')
print("收到的内容已保存到 output.txt。")
except Exception as e:
print(f"保存文件时出错: {e}")
message = input("master zk 回应:")
encrypted_message = encrypt(message, shift)
client_socket.send(encrypted_message.encode())
'''关闭连接'''
client_socket.close()
server_socket.close()
客户端运行结果如下

服务端运行结果如下


5. 提交至gitee,如下图

6. 实验过程中遇到的问题和解决过程
-
问题1:我作为服务端时,两人通讯时聊一次就退出了,如下图;
![]()
-
问题1解决方案:对方将客户端代码进行了一些改正,如下图(包含客户端改正后的代码及运行结果);
![]()
![]()
-
问题2:我作为客户端时,无法接入对方服务器,如下图
![]()
问题2解决方案:地址不能输入自己电脑上的,应输入对方(服务端)的地址;
其他(感悟、思考等)
又又又学到了东西,虽然有些懵懂,但总的来说,是一次新奇的模式,链接对话初步给我一种高级感以及更大的兴趣。
老师的教导,自己动手与同学间的交流学习缺一不可;要学的还有很多,未来道路任重而道远。





浙公网安备 33010602011771号