20192316 2020-2021-2 《Python程序设计》实验三报告
20192316 2020-2021-2 《Python程序设计》实验三报告
课程:《Python程序设计》
班级: 1923
姓名: 贝世之
学号:20192316
实验教师:王志强
实验日期:2021年5月24日
必修/选修: 公选课
1.实验内容
创建服务端和客户端,服务端在特定端口监听多个客户请求。客户端和服务端通过Socket套接字(TCP/UDP)进行通信。
(1)创建服务端和客户端,选择一个通信端口,用Python语言编程实现通信演示程序;
(2)要求包含文件的基本操作,例如打开和读写操作。
(3)要求发送方从文件读取内容,加密后并传输;接收方收到密文并解密,保存在文件中。
(4)程序代码托管到码云。
2. 实验过程及结果
2.1 创建服务器
先初始化服务器,再令服务器连接本地IP地址+端口,设置服务器可以监听多个客户请求(此处设为3),当然客户端得排队。
为了让服务器能一直工作,我令服务器循环工作,同时将接收到的密文通过base64.b64decode解密后保存至“server.txt”文件。
2.2 创建多个客户端
先读取文件信息,再通过base64.b64encode()对文件进行加密。
题目要求服务端在特定端口监听多个客户请求,因此此处设置两个客户端,尝试同时对服务器进行通信请求。
2.3 进行通信
通信过程如下图,服务端能同时监听多个客户请求,同时客户端满足打开文件加密传输的要求,服务器满足解密并写文件的要求,同时给以客户端回复。
客户端1向服务器发送加密文件
服务器接收客户端1的加密文件并解密保存
客户端2向服务器发送加密文件
服务器接收客户端2的加密文件并解密保存
2.4 托管到码云
3. 实验过程中遇到的问题和解决过程
- 问题1:服务器进入持续循环,如果通过输入关闭服务器又不合逻辑
- 问题1解决方案:服务器就应该一直工作=_=,7*24小时工作,因此不考虑退出服务器(可以手动关闭)。
- 问题2:读写文件报错argument must be str, not bytes
- 问题2解决方案:加入.encode("utf-8")和.decode("utf-8"),将字符串转为字节。
其他(感悟、思考等)
这可比java编程实现客户端和服务器简单多了o(╥﹏╥)o,Python大法好,传送门-java远程计算器。