144
社区成员
发帖
与我相关
我的任务
分享# 学号 2022-2023-2 《Python程序设计》实验三报告
课程:《Python程序设计》
班级: 2234
姓名: 李硕
学号:20223405
实验教师:王志强
实验日期:2023年4月13日
必修/选修: 公选课
## 1.实验内容
创建服务端和客户端,服务端在特定端口监听多个客户请求。客户端和服务端通过Socket套接字(TCP/UDP)进行通信。
## 2. 实验过程及结果
此处与20223416吕逸锋进行通信
①实验相关代码(此处已托管到gitee,所以直接把两步合并)
(1)加密算法代码

(2)服务端代码

(3)客户端代码

(4)实验结果:
我作为服务器:

我作为客户端:

## 3. 实验过程中遇到的问题和解决过程
- 问题1:在运行加密算法时显示“NoPydes”相关内容并报错
- 问题1解决方案:在仔细查看错误后发现是未安装PyDes模块导致加密算法无法运行,安装PyDes模块后问题解决。
- 问题2:在运行解密算法时出现一系列错误,如hasnolen,cantendode等类似的错误
- 问题2解决方案:经询问老师后发现是自身对编码,加密和解码的本质理解不清,导致三者之间的顺序产生问题,使最终传输出去的内容并非预期的加密内容,也就导致了无法用解码和解密算法解密。同时也经过自查发现对变量进行解密和解码操作不改变变量自身的值。所以我们通过单独设立变量,调换编码、解码和解密的顺序,成功使程序运行。
- 问题3:在互相连接时显示“积极拒绝”,且关闭防火墙等常规方法尝试均无用
- 问题3解决方案:经询问老师和上网查找发现,是我们对bind方法的理解不清晰。bind方法的目的是将socket与指定IP的指定端口进行连接以进行监听,如果bind的是127.0.0.1或者是自己的IP,则只会监听到本机的通信。因此在服务端应把bind的IP改为公共IP(此处为0.0.0.0)。更改bind的IP后成功建立通信。
- 问题4:无法发送中文
- 问题4解决方案:加密算法不支持对unicode的解码,所以我们采用了encode,加密再encode的三重方法,解决了这一问题。
## 其他(感悟、思考等)
本次实验是对高级开发和网络通信的一次简单学习,通过学习文件和socket等方法构建了一个两台主机间的通信系统,并实现了简单的通信。虽然我们在一系列的出现问题和解决问题的过程中勉强完成了此次实验,但是我们所做的也不过是对代码的复刻和重复性的尝试,而实际上我们对于这些代码的本质和实际发挥的作用还是存在不明确和混淆(尤其是bind方法)。要想实现熟练的操作和编写,仅凭在课上学习的知识还远远不够,我们需要进行更深层次的研究和学习才能够对这些知识有更加清晰的认知,才能够更好地去利用它们。