20182229lql

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

20182229 2020-2021-2 《Python程序设计》实验三报告

课程:《Python程序设计》
班级: 1822
姓名: 李乾龙
学号:20182229
实验教师:王志强
实验日期:2021年5月24日
必修/选修: 公选课

1.实验内容

创建服务端和客户端,服务端在特定端口监听多个客户请求。客户端和服务端通过Socket套接字(TCP/UDP)进行通信。

(1)创建服务端和客户端,选择一个通信端口,用Python语言编程实现通信演示程序;

(2)要求包含文件的基本操作,例如打开和读写操作。

(3)要求发送方从文件读取内容,加密后并传输;接收方收到密文并解密,保存在文件中。

(4)程序代码托管到码云。

2. 实验过程及结果

       首先做一个题目分析,要完成通信过程,根据计算机网络所学知识,要有三个关键部分组成即发送方、接收方和服务器,

所以先依次创建,然后进行数据通路的连接,连接过程进行加密即可

2.1 创建服务器

      (1)创建套接字,然后将套接字与本地IP与端口号绑定

      s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

      s.bind(('127.0.0.3', 12578))

      (2)监听客户端

      s.listen(3)

      (3)接受数据并返回确认信息

      data = conn.recv(1024) # 接受套接字的数据,最大数据量为1024

      print(data.decode("utf-8"))

      conn.sendall((str(data.decode("utf-8"))).encode("utf-8"))

2.2 创建发送方

      (1)与服务器一样,先创建套接字,然后将套接字与本地IP与端口号绑定  

      s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

      s.bind(('127.0.0.4', 12578))

      (2)将要传输的数据文件进行加密

      cipher = base64.b64encode(data)

      (3)将加密过后的文件进行传输

      s.sendall(cipher)

2.3 创建接收方

      (1)没错还是一样,创建套接字,与本地IP和端口号绑定  

      s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

      s.bind(('127.0.0.5', 12578))

      (2)接收服务器发来的加密文件,并返回确认信息

       data = conn.recv(1024) # 接受套接字的数据,最大数据量为1024

       print(data.decode("utf-8"))

       conn.sendall((str(data.decode("utf-8"))).encode("utf-8"))

       (3)将接受到的数据解密并写入txt文件,关闭套接字

        f = open("Server.txt", 'w', encoding="utf-8")

        f.write((base64.b64decode(data).decode("ascii")))

        s.close()

2.4 实验结果

        发送方输入数据后,服务器收到加密后的数据并转发送给接收方,接收方收到加密的数据后进行解密,得到明文

3. 实验过程中遇到的问题和解决过程

        本次实验我认为难点并不在python代码本身,而在于理解密码学的加密和解密过程以及计算机网络的通信过程,

在进行实验前可以先用packettracer做做仿真,理解通信过程后再做实验会更容易理解

参考资料

https://blog.csdn.net/qq_37193537/article/details/91043580?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162242869816780357247799%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=162242869816780357247799&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~baidu_landing_v2~default-1-91043580.first_rank_v2_pc_rank_v29&utm_term=python+Socket%E7%BC%96%E7%A8%8B%E6%8A%80%E6%9C%AF&spm=1018.2226.3001.4187

 

posted on 2021-05-31 10:39  20182229lql  阅读(58)  评论(0编辑  收藏  举报