93
社区成员
发帖
与我相关
我的任务
分享# 20234108 2023-2024-2 《Python程序设计》实验三报告
课程:《Python程序设计》
班级: 2341
姓名: 申屠景浩
学号:20234108
实验教师:王志强
实验日期:2024年4月16日
必修/选修: 公选课
## 1.实验内容
(1)创建服务端和客户端,选择一个通信端口,用Python语言编程实现通信演示程序;
(2)服务端在特定端口监听多个客户请求。客户端和服务端通过Socket套接字(TCP/UDP)进行通信。要求发送方从文件读取内容,加密后并传输;接收方收到密文并解密,保存在文件中。
(3)将程序代码托管到码云。
## 2. 实验过程及结果
1、先编写服务端程序。使用 import socket 引入Python内置的socket模块。调用 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) ,创建一个基于IPv4协议的流式套接字。
2、使用 s.bind(("192.168.1.104", 1234)) 将套接字绑定到特定的IP地址"192.168.1.104"和端口1234,完成对服务器地址和端口的绑定。
3、调用 s.listen() 将套接字设置为监听状态,等待客户端的连接请求。使用“conn, address = s.accept()”语句等待并接受一个客户端的连接请求。使用 data = conn.recv(1024) 从客户端接收数据。参数 1024 表示最多接收1024字节的数据。
4、用“print("从客户端收到的信息为:", data.decode())”打印接收到的消息。其中data.decode())将接收到的字节数据解码回字符串形式。最后用使用 conn.sendall("你的消息已收到,谢谢!".encode())将语句“您的消息已收到,谢谢” 编码为字节序列,并通过与客户端连接的套接字(conn)发送给客户端。

1、接着编写客户端程序。用 import socket 引入Python内置的socket模块。使用 open("secret.txt","r+") 打开名为 "secret.txt" 的文件,使用 file1.write("记得写高数作业") 语句向文件中写入字符串 "记得写高数作业"。
2、使用“s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
”语句创建一个基于IPv4协议的流式套接字,建立与指定服务器的连接:s.connect(("192.168.1.104", 1234))。这里连接到IP地址为 "192.168.1.104"、监听端口为1234的服务器。
3、调用 s.recv(1024) 接收服务器发来的数据。其中参数 1024 表示最多接收1024字节的数据。接收到的字节数据存储在变量 data 中。使用 data.decode() 将接收到的字节数据解码回字符串形式,用print("从服务器接收的数据为:", data.decode())语句打印包含接收到的解码后数据的消息。最后,调用 s.close() 语句关闭与服务器的套接字连接。
最后的运行结果如下图所示:


上述程序实现的是和本机之间自身的发送与接收,按照老师上课演示的程序,通过学习、消化和吸收,在于20234119李海鑫同学的合作中,我作为客户端,成功实现了和对方跨机信息的彼此发送和接收:

## 3. 实验过程中遇到的问题和解决过程
- 问题1:服务端无法正常接收客户端发来的消息
- 问题1解决方案:检查IPv4地址是否无误,发现前后两个程序输入的地址不一致,修改后没有出现问题。
- 问题2:报错“FileNotFoundError: [Errno 2] No such file or directory: 'secret.txt'”
- 问题2解决方案: 在对应文件夹下创建名为secret.txt的txt文件,从而使要发送的语句能够写入到该本地文件中。
- 问题3:双方IPv4地址一致、端口一致时仍无法正常传输(客户端发消息,服务端无显示)
- 问题3解决方案: 确认程序无误后,更换新的端口,反复尝试,最终成功。
## 其他(感悟、思考等)
利用Socket套接字(TCP/UDP)进行通信对我来说是一个全新的内容,难度很大,涉及很多之前从未涉猎的知识点和领域。通过对老师示范的程序的反复钻研和相关资料的查找,在同学的帮助下,我对这部分内容有了一个比较粗略、初步的理解。今后我还是要继续深入学习这部分内容,做到真正理解和掌握。
# #参考资料
https://blog.csdn.net/mouxiaoxiong/article/details/52160367
socket套接字详解(TCP与UDP)_图解套接字-CSDN博客