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

实验三

(一)实验内容

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

(二)实验要求

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

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

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

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

(三)实验报告

课程:《Python程序设计》
班级: 1931
姓名: NO WAY
学号:20193120
实验教师:NO WAY
实验日期:2020年5月16日
必修/选修: 公选课

1.实验内容

client端:先对消息进行加密,再发送加密后消息。
sever端:接收client发来的消息,然后解密,将解密后的内容放到文件中。

2. 实验过程及结果

client端:
1:与server端进行连接,并处理需要传送的内容。

2:用户将需要传送的内容写到指定文件中,然后保存,运行代码即可进行传输。

3:在client端进行加密,将加密后的内容整合成一个字符串,编码后统一传输过去。

server端:
1:与client端进行连接,传输内容。

2:编写代码进行解码。其中专门设置一个函数“decode”进行解码,返回值为解密好的内容。

3:打开一个新的文件,将解密好的内容写到文件中。
(之后一定要记得写file.close()!!!)

运行:
先运行server端,再运行client端。结果如下:

字符通过加密的形式成功传输,并被server端进行解密,解密之后内容被放到了新的文件当中。

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

  • 问题1:加密方案

  • 问题1解决方案:

    为防止加密后的字符超过ASCII码的范围,所以对ASCII码值小于125的字符进行加密。
    另外,对原来的'\n'进行加密的时候,会出现系统无法识别(正方形中有一个问号)的情况,所以不对转行字符进行加密。

  • 问题2:无法处理读取后的文件

  • 问题2解决方案:因为读取完文件之后,没有写file.close(),所以无法删除

    只需要在读取完成之后,加上file.close()即可

  • 问题3:传输和解码问题
    问题3解决方案:
    对于传输问题,先把加密后的每一个字符用空格隔开,然后编码成二进制之后,用sendall全部送过去。
    解码问题,server端收到之后,先进行decode获得密文,再用split函数,以空格为间隔,将发过来的每个字符单独拆分成一个列表元素,然后server端的密钥进行一一解码。

  • 问题4:附加bug

    原因:在用ASCII码关系解密的时候,遇到了空字符串,无法解密,系统报错。
    解决办法:因为列表的最后元素是空字符串,所以会报错。只需这样修改即可修复bug:
    for i in range(len(unknown)-1):
    或者在解密部分这样修改:
    elif ord(unknown[i]) <= 125 and unknown[i] != '':
    修改后,程序正常运行。

sever端和client端的码云:https://gitee.com/i_am_yu/exp3

其他(感悟、思考等)

1:上述加密办法属于简单的加密办法,类似于凯撒密码,很容易被破解,需要用高级加密算法才能避免其被轻松破解。
2:目前只能对ASCII字符进行加密,遇到其他不属于ASCII码范围的字符,例如中文字符,则无能为力。
3:QQ能做到上传各种文件到群文件或者传输给其他人。如果可能的话,还可以增加传输其他类型文件的功能,这个代码目前只支持传输txt文件。

posted @ 2020-05-16 11:47  compile_error  阅读(341)  评论(0编辑  收藏  举报