学号 20213419刘盼 《Python程序设计》实验3报告
2022/5/3 20:15:09
本文主要是介绍学号 20213419刘盼 《Python程序设计》实验3报告,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
学号 20213419 实验三《Python程序设计》实验报告
课程:《Python程序设计》
班级: 2134
姓名: 刘盼
学号:20213419
实验教师:王志强
实验日期:2022年4月21日
必修/选修: 公选课
1.实验内容
创建服务端和客户端,服务端在特定端口监听多个客户请求。客户端和服务端通过Socket套接字(TCP/UDP)进行通信。
2. 实验过程及结果
(1)创建服务端和客户端,选择一个通信端口,用Python语言编程实现通信演示程序;
(2)要求包含文件的基本操作,例如打开和读写操作。
(3)要求发送方从文件读取内容,加密后并传输;接收方收到密文并解密,保存在文件中。
(4)程序代码托管到码云。
注:在华为ECS服务器(OpenOuler系统)和物理机(Windows/Linux系统)上使用VIM、PDB、IDLE、Pycharm等工具编程实现。
代码
服务端
import socket import base64 from Crypto.Cipher import AES def add_to_16(value): while len(value) % 16 != 0: value += '\0' return str.encode(value) def encrypt(key, text): aes = AES.new(add_to_16(key), AES.MODE_ECB) encrypt_aes = aes.encrypt(add_to_16(text)) encrypted_text = str(base64.encodebytes(encrypt_aes), encoding='utf-8') return encrypted_text def decrypt(key, text): aes = AES.new(add_to_16(key), AES.MODE_ECB) base64_decrypted = base64.decodebytes(text.encode(encoding='utf-8')) decrypted_text = str(aes.decrypt(base64_decrypted), encoding='utf-8').replace('\0', '') return decrypted_text s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.bind(('127.0.0.1',8001)) s.listen() conn,address=s.accept() data=conn.recv(1024) data=data.decode() data = decrypt('liupan',data) print(data) conn.sendall(("服务器已经收到接受内容:"+data).encode()) s.close()
客户端
import socket import base64 from Crypto.Cipher import AES def add_to_16(value): while len(value) % 16 != 0: value += '\0' return str.encode(value) def encrypt(key, text): aes = AES.new(add_to_16(key), AES.MODE_ECB) encrypt_aes = aes.encrypt(add_to_16(text)) encrypted_text = str(base64.encodebytes(encrypt_aes), encoding='utf-8') return encrypted_text def decrypt(key, text): aes = AES.new(add_to_16(key), AES.MODE_ECB) base64_decrypted = base64.decodebytes(text.encode(encoding='utf-8')) decrypted_text = str(aes.decrypt(base64_decrypted), encoding='utf-8').replace('\0', '') return decrypted_text s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.connect(('127.0.0.1',8001)) file1=open("hello啊","r+",encoding="GBK") file1.write("hello!!!!!!!") str1=file1.readlines() file1.close() #str=input("请输入要传输的内容;") #s.sendall(str.encode()) key1 = 'liupan' str1 = encrypt(key1,str(str1)) s.sendall(str1.encode()) data=s.recv(1024) print(data.decode()) s.close()
测试截图
上传gitee截图
3. 实验过程中遇到的问题和解决过程
- 问题1:试了很多遍,无法在电脑中找到Crypto.Cipher模块
- 问题1解决方案:找同学问和看老师发的资料学习,历经艰难,解决困难
- 问题2:开始不怎么懂建立客户端·和服务器的含义
- 问题2解决方案:在网上看了相关介绍明白了
其他(感悟、思考等)
这次实验是我觉得最难的一次实验,主要是不会的东西太多了,譬如加密的代码让我很是迷惑,只有通过询问同学和老师,加上自己在网站上看相关介绍才略知一二,我在python这方面真的只能算是一个萌新了,不会的还有很多,所以今后我要加倍努力,才能真正学懂python,将python应用到日常生活中解决实际问题;当然,学习的起步过程是十分痛苦的,但这不能妨碍我们继续向前。
参考资料
-
Python 网络编程:socket自学
-
python socket编程详细介绍
这篇关于学号 20213419刘盼 《Python程序设计》实验3报告的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-08有遇到过吗?同样的规则 Excel 中 比Python 结果大
- 2024-03-30开始python成长之路
- 2024-03-29python optparse
- 2024-03-29python map 函数
- 2024-03-20invalid format specifier python
- 2024-03-18pool.map python
- 2024-03-18threads in python
- 2024-03-14python Ai 应用开发基础训练,字符串,字典,文件
- 2024-03-13id3 algorithm python
- 2024-03-13sum array elements python