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

其他(感悟、思考等)

感悟:

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

参考资料

posted @ 2020-05-16 15:58  腹黑之米  阅读(137)  评论(0编辑  收藏