20193223 2020-2021-2 《Python程序设计》实验三报告
课程:《Python程序设计》
班级: 1932
姓名: 张中怀
学号:20193223
实验教师:王志强
实验日期:2021年5月30日
必修/选修: 公选课
1.实验内容
1.1 实验内容
创建服务端和客户端,服务端在特定端口监听多个客户请求。客户端和服务端通过Socket套接字(TCP/UDP)进行通信。
1.2 实验要求
1.2.1 创建服务端和客户端,选择一个通信端口,用Python语言编程实现通信演示程序;
1.2.2 要求包含文件的基本操作,例如打开和读写操作。
1.2.3 要求发送方从文件读取内容,加密后并传输;接收方收到密文并解密,保存在文件中。
2. 实验过程及结果
2.1实验代码
''' 文件名称:Science_3_client 姓名:张中怀 学号:20193223 时间:2021/5/30 ''' import socket import os.path import base64#算法 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #创造TCP Socket s.connect(('127.0.0.1', 80)) test = input("请输入要传输的文件名:") s.sendall(test.encode()) #完整发送TCP数据 os.chdir(r"C:\\Users\Administrator\Desktop\client") #设置为当前工作目录,只读。 file = open(test, 'r') #文件打开 text = file.read() text = text.encode('utf-8') encode_text = base64.b32encode(text) s.sendall(encode_text) file.close() #关闭文件 data = s.recv(1024) #接受TCP套接字的数据,且MAX=1024 print("来自 ('127.0.0.1') 的信息:", data.decode()) s.sendall("收到".encode()) name = s.recv(1024) print("来自 ('127.0.0.1') 的文件:", name.decode()) data = s.recv(1024) f = open("answer.txt", "w") #写模式 f.write(data.decode()) f.close() #关闭 print("文件内容已加密发送") s.sendall("已成功接收,中断连接!".encode()) #把命令发送给对端 s.close() #关闭连接
''' 文件名称:Science_3_server 姓名:张中怀 学号:20193223 时间:2021/5/30 ''' import socket import os.path import base64 os.chdir(r"C:\\Users\Administrator\Desktop\client") s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind(('127.0.0.1', 80))#绑定 s.listen()#监听 conn, address = s.accept()#阻塞 name = conn.recv(1024) print("来自", address, "的文件:", name.decode()) data = conn.recv(1024) f = open("receive.txt", "w") data1 = base64.b32decode(data) f.write(data1.decode()) f.close() print("来自", address, "加密的信息:", data.decode(), "解密后已保存为receive.txt") conn.sendall("服务器已经收到了数据内容,准备传输文件,请注意接收!".encode()) data1 = conn.recv(1024) conn.sendall("answer.txt".encode()) f = open("receive.txt", "r") data1 = f.read() conn.sendall(data1.encode()) f.close() data1 = conn.recv(1024) print("收到来自", address, "的信息", data1.decode()) s.close()
2.2实验结果
客户端结果:
服务端结果:
上传码云:
码云连接:https://gitee.com/zhang-zhonghuai/python_20193223
3. 实验过程中遇到的问题和解决过程
-
问题1:[WinError 10061] 由于目标计算机积极拒绝,无法连接。
- 解决措施:(1)控制面板 — 网络和Internet — 网络和共享中心 — Internet选项 — 连接 — 局域网设置 — 自动检测设置 。
(2)关闭防火墙。
(3)服务端与客户端分开,先运行服务端,再运行客户端。
-
问题2:[Errno 2] No such file or directory
- 解决措施:(1)重命名原文件,更改原文件后缀名。或更改程序中读取文件名。
(2)采用绝对路径的方法来打开文件。
4.其他(感悟、思考等)
这次实验,由于课上听的一知半解,课下没有进行过多训练,所以进行的并不是非常顺利,好多知识点没有掌握,耗费了大量的时间在知识点的复习上。此外通过对socket模块的复习,我发现还有很多有意思的东西,还需要更深入的去学习,最后非常感谢王老师课上的讲解,也感谢帮助我解决问题的同学们。
参考资料
无