20182204 实验三《Python程序设计》实验报告
20182204 《Python程序设计》实验三报告
课程:《Python程序设计》
班级:1822
姓名:20182204zwp
学号:20182204
实验教师:王志强老师
实验日期:2020年5月16日
必修/选修: 公选课
2. 实验内容及结果
(一)实验内容
创建服务端和客户端,服务端在特定端口监听多个客户请求。客户端和服务端通过Socket套接字(TCP/UDP)进行通信。
(二)实验要求
(1)创建服务端和客户端,选择一个通信端口,用Python语言编程实现通信演示程序;
(2)要求包含文件的基本操作,例如打开和读写操作。
(3)要求发送方从文件读取内容,加密后并传输;接收方收到密文并解密,保存在文件中。
(4)程序代码托管到码云。
server端代码
import socket import struct import base64 FILEINFO_SIZE=struct.calcsize('128s32sI8s') s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.bind(('127.0.0.1',8001)) s.listen(5) conn,address=s.accept() print("文件接收开始") with open('file', 'ab' ) as f: # 接收数据 data = conn.recv(1024) if data == b'quit': breakpoint() # 写入文件 f.write(data) # 接受完成标志 conn.send('success'.encode()) print("文件接收完成") # 关闭连接 print("加密后的内容:") with open('file', 'r',encoding='UTF-8') as f: based_data1= f.readline().encode() print(based_data1) plain_data1 = base64.b64decode(based_data1) open("file", "w").close() with open('file', 'wb') as f: f.write(plain_data1) print("解密后的内容:") with open('file', 'r',encoding='UTF-8') as f: print(f.readline()) with open("file",'rb') as f: for i in f: conn.send(i) data=conn.recv(1024) if data!= b'success': break conn.send('quit'.encode()) s.close()
client端代码
import socket import base64 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect(('127.0.0.1', 8001)) print("加密后的内容:") with open(r"C:\Users\86138\Desktop\1822\20182204.txt", 'r',encoding='UTF-8') as f: data=f.readline().encode() based_data1 = base64.b64encode(data) print(based_data1) open(r"C:\Users\86138\Desktop\1822\20182204.txt", "w").close() with open(r"C:\Users\86138\Desktop\1822\20182204.txt", 'wb') as f: f.write(based_data1) with open(r"C:\Users\86138\Desktop\1822\20182204.txt", 'rb') as f: for i in f: s.send(i) data = s.recv(1024) if data != b'success': break s.send('quit'.encode()) print("解密后的内容:") file = s.recv(1024) with open('file', 'r', encoding='UTF-8') as f: print(f.readline()) f.close()
实验结果截图
3. 实验过程中遇到的问题和解决过程
-
问题1:遇到了编码的问题,此处应该是str类型不应该是byte类型
-
问题1解决方案:百度后得知,用decode完美解决
-
问题2:加密解密问题
-
问题2解决方案:王老师里面发了连接,我挑了一个比较简单的base加解密算法,完美解决
感悟
本次实验令我受益良多,更好的理解了服务器与客户端之间的连接传输,更灵活的应用了加解密算法。