20222415 2024-2025-2 《Python程序设计》实验三报告

20222415 2024-2025-2 《Python程序设计》实验三报告

课程:《Python程序设计》
班级: 2224
姓名: 田汝绮
学号:20222415
实验教师:王志强
实验日期:2025年4月16日
必修/选修: 公选课

一、实验内容

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

二、 实验过程及结果

由于在上学期的嵌入式课程中我已经使用c语言编写了sokect通信程序和加解密程序,那我这次实验的重点是使用python重新编写这些程序。下面是我上学期写的代码,一个程序是c从文件中读取信息然后发给s;一个则是可以提供密码服务的简单密码设备程序,本次实验我准备参考这两个程序来写。下面是我之前写的两个程序。
socket通信
简易密码设备
1.socket通信、文件读写
先参照socket通信来编写代码,实现s与c的通信,让c与s可以互相发消息,并且在这个过程中实现文件的读写。
代码在这里:socket通信、文件读写
运行结果在这里,c端先后输入了hello、20222415、exit,每次c给s发消息后,s都会从文件中读出随机长度的文字然后发给c,s也会将c发过来的消息写入file2.txt,当c输入exit后就结束通信。

2.加解密
现在就来实现加解密,这里有个问题是我的c语言程序实现加解密使用了sm3和sm4库,修改起来有些麻烦(当然很大程度上是我不太会),现在我要自己写代码来实现sm4了...吗?实则不然,sm4作为商密的一份子,肯定是有python的sm4模块的啦。经过上网搜索,我选择使用gmssl,这里放一下gmssl的介绍
gmssl是一个开源的加密包的python实现,支持SM2/SM3/SM4等国密(国家商用密码)算法、项目采用对商业应用友好的类BSD开源许可证,开源且可以用于闭源的商业应用。
接下来我将加解密功能加进了c给s发消息的过程,c输入消息后进行加密,将加密的消息传给s,s解密后写入file2.txt
下面是运行结果:

3.将代码托管到码云
下面是写完2.加解密后的代码
https://gitee.com/rukiting/pythontest/tree/test1/dist

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

  • 问题1:在按照socket通信写好s与c的通信后,发现通信时s在收到c的消息后本应该将消息写入file2.txt,但是file2.txt并未被修改,这里时出现问题的代码:问题代码,初步检查排除了s未正确接收到消息的情况。
  • 问题1解决方案:对于该问题我是和我的好朋友豆包进行讨论的:)

    这里豆包给我给出了三个检查方向:检查路径、检查权限、增加错误处理代码。
    这里我对前两种情况进行了检查,发现时没错的,那就根据豆包给的代码来进行修改,当然,修改后就能正常修改了。
    但是后面我发现最开始s不是不会修改file2.txt,而是会在c输入exit结束通信后再进行对file2.txt的修改,我先推测是和缓冲区有关。问一下豆包是不是:)

    嗯,看来确实是这样。

参考资料

posted @ 2025-04-23 00:49  RukiTing  阅读(22)  评论(0)    收藏  举报