txm2019969305

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

20204323 《Python程序设计》实验三报告

课程:《Python程序设计》
班级: 2043
姓名: 太晓梅
学号:20204323
实验教师:王志强
实验日期:2022年5月4日
必修/选修: 公选课

1.实验内容

创建服务端和客户端,服务端在特定端口监听多个客户请求。客户端和服务端通过Socket套接字(TCP/UDP)进行通信。
实验要求如下:
1.创建服务端和客户端,选择一个通信端口,用Python语言编程实现通信演示程序;
2.要求包含文件的基本操作,例如打开和读写操作。
3.要求发送方从文件读取内容,加密后并传输;接收方收到密文并解密,保存在文件中。
4.程序代码托管到码云。

2. 实验过程及结果

1.绑定端口进行通讯

首先根据老师上课讲解的代码,完成客户端和服务器端的绑定端口号;服务器端的监听,发送;客户端的发送数据,接收等基本功能。
编写代码完成客户端和服务器端之间基本的通讯(这一步忘记截图了)。
在自己的本地主机中命令行窗口输入命令行ipcomfig,查看本机在无线局域通信中的ip号,填写到代码中。

2.利用DES代码实现通讯的加解密

在查阅资料后选择利用CSDN中其他用户提供的DES加解密代码改编来实现本次通信的加解密。
创建类encryption和decryption实现加解密,创建文件key来储存密钥。

在加密类中,从文件key中读取密钥KEY,完成加密过程,如图所示:

在解密类中,设置一个通讯密码Code,要求服务器端输入通讯密码才能成功对接受到的密文进行解密,当输入的通讯密码code与Code相等时,从文件key中读取密钥KEY,完成解密过程,如图所示:

3.在通讯过程中完成加解密

在客户端输入传输内容后,创建加密对象,对明文进行加密,密文发送给客户端。
等待并接收客户端发送的数据。

在服务器端接收到数据后,创建解密对象,对密文进行解密(通信密码在上一步加解密中详细叙述过了),将接收到的密文以及解密后得到的明文返回给客户端。

4.运行结果

运行服务器端,进行监听。
运行客户端发送信息,并加密,将密文发送给服务器端。
服务器端接收到密文后输入通信密码进行解密,并将密文以及解密结果发送给客户端。

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

  • 问题1:从网上找到的DES加解密算法刚开始无法运行
  • 问题1解决方案:后查看编译错误,发现python中不含网上的代码中所含有的库,到网上查询了如何安装python的库,并安装了改代码所需要的库。
  • 问题2:加密类中显示运行错误
  • 问题2解决方案:排查之后发现是由于类的方法中取名为read,与读取文件的命令符read重名,导致后续无法正常读取文件。修改方法名后一切正常。
  • 问题3:在代码编译成功后,显示主机强迫关闭了现有链接
  • 问题3解决方案:在询问同学后,换了一个端口号,问题得到解决。
  • 问题4:服务器端返回了两条信息,但客户端只显示出一条
  • 问题4解决方案:排查之后发现客户端的代码只执行了一次接收,再加了一次之后达到预期效果。

其他(感悟、思考等)

本次实验稍微有点儿难度,完成起来也相对比较费劲。不过自己在解决一个又一个的问题之后,觉得收获很大。对编程,对python以及对socket都有了更深的了解。同时在本次实验中最大的感触就是关于python和其他类型的语言的不同,C语言更多的都是在讲一些基础的算法,想要运用C语言来实现这次实验中的这个功能对我来说几乎是不可能的事情。但python作为高级语言更能实现一些面向用户操作的功能,并且由于python强大的调用库,实现起来十分便捷,简短的几行代码就能搞定,大大缩减了debug的难度。这次实验完成的任务是我第一次通过编程实现这样的功能,让我体会到了python的魅力。

参考资料

posted on 2022-05-04 18:01  飞天偷月亮。  阅读(47)  评论(0编辑  收藏  举报