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

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

课程:《Python程序设计》
班级: 2342
姓名: 马燕秋
学号:20234220
实验教师:王志强
实验日期:2025年4月15日
必修/选修: 专选课

1.实验内容及实验要求

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

实验要求:

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

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

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

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

2. 实验过程及结果

(1)创建TCP服务端:

a.先引入socket,创建服务器套接字。绑定服务器的地址和端口。(可以在命令提示符中使用ipconfig查看ip)

b.设置监听和客户端连接,且等待连接和已连接都会输出当前状态。(此处等待队列允许的最大程度是2,多的服务器会直接拒绝)

c。使用while循环控制消息的收发,先接受客户端消息,再发送响应的消息,一轮对话结束后,若输入N,则对话自动结束。(upper可以将字符串转换为大写,这样就用户不需要区分大小写)设置客户端单次发送的数据量不能大于1024字节;因为字节数据是二进制,所以使用UTF-8编码将字节数据解码为字符串。

d.最后关闭连接。

(2)创建TCP客户端

a.引入socket,创建客户端套接字,设置好服务器的地址和端口,再连接到服务器。

b.使用while循环控制消息的收发,先发送消息,再接收服务器响应的消息,一轮对话结束后,若输入N,则对话自动结束。

c.最后关闭连接。

(2)经过调试 ,发现没有问题,可以正常运行。

(3)在TCP服务端中加入加密算法和文件传输

a.对加密函数进行定义:将信息进行简易加密,使用chr()函数和ord()函数将每个字符的ASCII码值加1,然后进行解密,反过来将ASCII码值减1。

b.接收客户发送的加密数据再将其转化为字符串,然后将数据解密出来。

c.对接收到的信息进行分类处理:若收到的是文件,则提取内容,然后提示用户输入保存路径,使用“w”进行写入,然后将try…except和with open语句配合使用对文件进行保存和防止文件读取失败、保存不成功的情况。若是正常消息,则正常输出。

d.对发出的消息进行分类处理:若是文件,则使用try…except和“r”对文件进行读取加密发送或防止文件读取失败。若是消息,则慧姐输入后加密发送。若是N则退出。

(4)在TCP客户端中加入加密算法和文件传输

a.同样对加密函数进行定义:将信息进行简易加密,使用chr()函数和ord()函数将每个字符的ASCII码值加1,然后进行解密,反过来将ASCII码值减1。

b.使用和服务端相似的手法加入分类传输和分类解密保存。

(5)进一步美化和完善内容。

a.在发送选项前加入while循环,限制输入,防止输入错误时系统失去反应。

b.最后位置加入关闭保存文件时设置的变量f,防止文件丢失或保存错误。

(6)完成全部编码的编写

a.服务端

b.客户端

(7)重新调试和运行

a.建立连接并发送信息

b.发送文件

先编辑好客户端.txt中的内容,再运行程序,选择保存路径为服务端.txt,则接收到的内容可以保存到服务端.txt中。

接收到并保存后可以发现客户端发送的文件内容已经被保存到服务端.txt中,且内容一致。

c.测试询问是否循环

服务端测试正常。

客户端测试正常。

(8)与同学进行联络和通信,查看是否可以成功运行。

a.我是服务端,唐果儿同学是客户端。运行过程中文件发送和保存没有问题,消息收发也没有问题,可以实现正常退出。

b.我是客户端 ,唐果儿同学是服务端。运行过程中可以实现文件发送和接收,也可以进行消息收发和结束代码。

(9)程序代码托管到码云

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

  • 问题1:当发送时输入的不是“N”,“M”或“F”时,系统会崩溃,无法运行。

  • 问题1解决方案:通过询问老师,使用while循环控制输入,若输入内容不在范围内,会不断重复询问。

  • 问题2:代码没有问题,但是却不能运行。

  • 问题2解决方案:再次在命令提示符中使用ipconfig命令查看ipv4地址,更换代码中的地址。

其他(感悟、思考等)

此次实验中,我参考老师发送到群中的文件代码,先构建出最简单的可以进行信息收发的代码,后一点一点加入加解密和文件收发的内容,了解到了套接字的功能和简单运用,学会了简单加密和解密及如何使用“r”和“w”进行文件读写,也对上学期的计算机网络中讲解的C/S结构有了实感,收获满满。课堂上老师讲解最简单的通信方式时很详细,我觉得自己已经掌握了,但是看到实验要求中需要加入文件收发和加密等要求,忽然觉得非常难,一直拖着没有完成。但是通过网络查询各种讲解资料,询问老师和同学,再将实验要求分为多个板块一步一步完成,实验忽然变简单了,很快便完成了。但是最后的运行调试过程中困难又变多了,有时候前一分钟运行成功了,稍稍修改之后,后一分钟重新启动,代码又运行不了,就得按住Ctrl+Z进行还原和调试;有时候在宿舍运行成功了,换到教室又失败了(经过查找,发现是IP地址改变了,服务端ip需要修改);有时候自己运行成功了,但是和同学对话文件读取失败了……面对这么多困难,只能耐着性子一点一点修改,一遍一遍运行,最后完成了实验。开心开心开心开心开心~

参考资料

posted @ 2025-04-23 20:24  科里奥奥  阅读(48)  评论(0)    收藏  举报