20192223张鹏宇 2019-2020-2 《Python程序设计》实验三报告
课程:《Python程序设计》
班级: 1922
姓名: 张鹏宇
学号:20192223
实验教师:王志强
实验日期:2020年5月23日
必修/选修: 公选课
1.实验内容
创建服务端和客户端,服务端在特定端口监听多个客户请求。客户端和服务端通过Socket套接字(TCP/UDP)进行通信。
要求:
(1)创建服务端和客户端,选择一个通信端口,用Python语言编程实现通信演示程序;
(2)要求包含文件的基本操作,例如打开和读写操作。
(3)要求发送方从文件读取内容,加密后并传输;接收方收到密文并解密,保存在文件中。
(4)程序代码托管到码云。
2. 实验过程及结果
将socket和文件读写相结合,构建服务器和客户端进行通信
server端
client端
文件读写
gitee:
https://gitee.com/python_programming/zpy192223/blob/master/exp-server.py
https://gitee.com/python_programming/zpy192223/blob/master/exp-client.py
- tcp通信是流式传输,没有“包”的概念,所以没有“粘包”问题。(详见知乎:https://www.zhihu.com/question/20210025 )
- 传输时先将str字符串encode编码成bytes字节(utf-8),后再decode解码为str
- 最初尝试实用rsa加密算法,调用rsa库函数在客户端成功加密以及发送密文和密钥,但在服务器端无法进行解码,水平不足无法将传输来的密文密钥按照格式输入进函数,密钥是n,e,d,p,q的class。
- 在解决问题的时候,了解到了rsa算法的原理,以及国密算法,尽管没有把rsa算法用上但也算是有收获。
- 因为是中文,没有使用凯撒加密,选择了base64,应该也算加密吧,在文件读写上加上了时间。
3. 实验过程中遇到的问题和解决过程
- 问题:tcp无法传输
- 问题解决方案:tcp只能传输bytes
- 问题:file.read和file.readlines区别
- 问题解决方案:https://blog.csdn.net/davidchang365/article/details/94571754
小结
看似逻辑上简单的问题,实践起来需要很强的代码功底才能高效解决,道阻且长。