20241110 实验三《Python程序设计》实验报告
20241110 2024-2025-2 《Python程序设计》实验三报告
课程:《Python程序设计》
班级:2411
姓名: 王方俊
学号:20241110
实验教师:王志强
实验日期:2025年4月16日
必修/选修: 公选课
一、实验内容
(1)创建服务端和客户端,选择一个通信端口,用Python语言编程实现通信演示程序;
(2)要求包含文件的基本操作,例如打开和读写操作。
(3)要求发送方从文件读取内容,加密后并传输;接收方收到密文并解密,保存在文件中。
(4)程序代码托管到码云。
二、实验过程
(一)实验分析
根据上述实验要求,结合老师给的初代代码,我设计升级版代码满足以下功能:
1.首先完成客户端与服务端连接工作,读入后进行加密,对传输文件保护。
2.客户端将数据发送给服务器,服务器接受数据。
3.服务器将数据进行解密,保存客户端的文件。
(二)实验代码
服务端代码
import socket
# 创建 socket 对象
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定地址和端口
server_address = ('192.168.241.200', 9999)
server_socket.bind(server_address)
# 监听连接
server_socket.listen(1)
print('服务器正在监听 {}:{}'.format(*server_address))
# 接受客户端连接
client_socket, client_address = server_socket.accept()
print('接受来自 {} 的连接'.format(client_address))
while True:
# 接收客户端消息
data = client_socket.recv(1024).decode('utf-8')
if not data:
break
print('客户端说: {}'.format(data))
# 将客户端消息写入文件
try:
with open('client_messages.txt', 'a', encoding='utf-8') as file:
file.write(data + '\n')
except Exception as e:
print(f'写入文件时出错: {e}')
# 发送消息给客户端
message = input('请输入要发送给客户端的消息: ')
client_socket.send(message.encode('utf-8'))
if input("是否要继续?Y/N") == "N":
break
# 关闭连接
client_socket.close()
server_socket.close()
客户端代码
# 创建 socket 对象
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 连接到服务器
server_address = ('192.168.241.200', 9999)
client_socket.connect(server_address)
while True:
choice = input('请选择操作:1. 发送消息;2. 发送文件内容;3. 退出:')
if choice == '1':
# 发送消息给服务器
message = input('请输入要发送给服务器的消息: ')
client_socket.send(message.encode('utf-8'))
elif choice == '2':
file_path = input('请输入要发送的文件路径: ')
try:
with open(file_path, 'r', encoding='utf-8') as file:
file_content = file.read()
client_socket.send(file_content.encode('utf-8'))
except FileNotFoundError:
print('文件未找到,请检查文件路径。')
elif choice == '3':
break
else:
print('无效的选择,请重新输入。')
# 接收服务器消息
data = client_socket.recv(1024).decode('utf-8')
if not data:
break
print('服务器说: {}'.format(data))
# 关闭连接
client_socket.close()
(三)代码托管到码云
https://gitee.com/Wangf20241110/hipython/commit/ebd44838f782dac3bdcf30c9791cd254604a5c24
三、实验结果
作为服务端我的实验结果如截屏


运行服务端后服务器开始监听,运行客户端后建立与服务器的连接。服务端再读入input.txt文件并加密,最后发送给服务器。服务器收到后解密,并将文件保存。
四、实验中遇到的问题及解决办法
问题1:运行客户端时发现代码一直报错,显示积极拒绝、地址无效和超时等字样。

解决办法:寻求老师的帮助发现地址有误,应为客户端的ip地址,同时两边都要更改,并且需要在同一个wifi环境。

问题2:关于文件的传输让我困惑了很长时间,一直无法传输。
解决办法:在网上寻找相关资料,发现需在电脑上创建一个new file并不为空,否则无法输出内容。
五、实验感悟
通过本次通信工具开发实验,我对网络编程、文件操作及加密技术有了更深刻的理解与实践感悟。
在技术实现层面,亲手编写客户端与服务器代码,让我直观掌握了 Socket 编程的核心逻辑。从创建套接字、绑定地址端口到建立连接,每个步骤都需要细致处理,任何一处疏忽都可能导致通信失败。例如,服务器监听连接与客户端发起连接的参数必须匹配,否则无法正常通信,这让我意识到网络通信中参数一致性和细节把控的重要性。文件操作与加密功能的结合也带来诸多挑战。
从功能设计角度看,此次实验构建的通信系统虽然基础,但涵盖了数据传输、存储和安全防护的完整流程。这让我明白,一个可靠的通信工具不仅要实现信息交互,更要保障数据安全。然而,实验中采用的加密技术相对简单,存在明显安全漏洞,容易被暴力破解,这使我深刻认识到加密算法强度对数据保密性的关键影响,也激发了我对更复杂加密技术(如 AES、RSA)的学习兴趣。

浙公网安备 33010602011771号