python程序控制结构与分支的实验报告_20192111 实验三《Python程序设计》实验报告...

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'的文件打开模式,使其以二进制的格式成功写入文件中

其他(感悟、思考等)

感悟:

在困难的事情都能够化繁为简,只要有耐心都能做到

参考资料

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值