20192111 2019-2020-2 《Python程序设计》实验三报告
课程:《Python程序设计》
班级: 1921
姓名: 蒋龙腾
学号:20192111
实验教师:王志强
实验日期:2020年5月16日
必修/选修: 公选课
1.实验内容
1.创建服务端和客户端,选择一个通信端口,用Python语言编程实现通信演示程序;
2.要求包含文件的基本操作,例如打开和读写操作。
3.要求发送方从文件读取内容,加密后并传输;接收方收到密文并解密,保存在文件中。
4.程序代码托管到码云。
2. 实验过程及结果
服务端
"""服务端"""
import socket
import base64
import os.path
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)
strdecode = base64.b64decode(data)
text = str(strdecode.decode()).encode()
print(text)
conn.sendall(("服务器收到内容:"+ str(strdecode.decode())).encode())
os.chdir(r"G:\pythonproject\shiyan3")
file = open(r"G:\pythonproject\shiyan3\code2.txt","ab")
file.write(text)
file.close()
s.close()
客户端
"""客户端"""
import os.path
import socket
import base64
os.chdir(r"G:\pythonproject\shiyan3")
file = open(r"G:\pythonproject\shiyan3\code.txt","a")
text = input("请输入内容:")
file.write(text)
file.close()
file = open(r"G:\pythonproject\shiyan3\code.txt", "r")
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('127.0.0.1', 8001))
str = file.read()
str1 = str.encode(encoding ='utf-8',errors = 'strict')
str2 = base64.b64encode(str1)
s.sendall(str2)
data = s.recv(1024)
print(data.decode())
s.close()
file.close()
结果展示:
码云链接:
3. 实验过程中遇到的问题和解决过程
-
问题1:不会对文件进行加密与解密
-
问题1解决方案:在菜鸟教程中找到了最简单的用base64进行加解密的方法
-
问题2:菜鸟教程中写道
str = "this is string example....wow!!!"; print "Encoded String: " + str.encode('base64','strict')
在pycharm中运行会报错
-
问题2解决方案:查询后得知python3不能直接这样使用,要先将需要加密的字符串转成bytes的string,bytes 再进行 base64 编码
str1 = str.encode(encoding ='utf-8',errors = 'strict') str2 = base64.b64encode(str1)
-
问题3:文件解密出来后是二进制,无法write到文件中
-
问题3解决方案:使用了'ab'的文件打开模式,使其以二进制的格式成功写入文件中
其他(感悟、思考等)
感悟:
在困难的事情都能够化繁为简,只要有耐心都能做到