20244225 实验三《python程序设计》实验报告

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

课程:《Python程序设计》
班级: 2442
姓名: 孟雨欣
学号:20244225
实验教师:王志强
实验日期:2024年4月15日
必修/选修: 公选课

1.实验内容

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

2. 实验过程及结果

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

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

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

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



这段 Python 程序具体功能如下:
(1) 创建套接字并绑定监听

  1. 创建 socket 对象:通过 socket.socket(socket.AF_INET, socket.SOCK_STREAM) 创建一个基于 IPv4 协议的 TCP 套接字。
  2. 绑定地址和端口:将套接字绑定到本地地址 localhost8888 端口 。
  3. 开始监听:使用 listen(1) 方法让服务器开始监听,同时设置允许的最大连接数为 1 。
    (2) 与客户端交互
  4. 等待连接:进入无限循环,通过 accept() 方法等待客户端连接,连接成功后打印客户端地址。
  5. 接收消息:进入内层循环,持续接收客户端发送的数据,将接收到的字节数据解码为 UTF - 8 格式字符串并打印。若接收数据为空,则跳出内层循环。
  6. 发送响应:通过 input() 函数从控制台获取用户输入内容,作为响应消息,将其编码为 UTF - 8 格式后发送给客户端。
  7. 关闭连接:当内层循环结束(如客户端断开连接),通过 finally 块确保关闭与客户端的连接。
    这段代码设计思路具体如下:
    (1)初始化服务器
  8. 创建套接字 :利用 socket.socket() 创建 TCP 套接字,指定 AF_INET(IPv4 地址族 )和 SOCK_STREAM(TCP 协议 ),这是基于 TCP 进行网络通信的基础。
  9. 绑定地址和端口 :通过 bind() 方法将套接字与本地 localhost8888 端口绑定,明确服务器监听的网络位置,以便客户端能准确连接。
  10. 设置监听 :使用 listen() 方法让服务器进入监听状态,listen(1) 表示允许最大 1 个未完成连接排队,准备接受客户端连接请求。
    (2)与客户端交互流程
  11. 等待连接 :通过无限 while 循环,使用 accept() 方法阻塞等待客户端连接。一旦有客户端连接,获取与客户端通信的套接字 client_socket 和客户端地址 client_address,并打印连接信息。
  12. 接收消息 :进入内层无限 while 循环,使用 recv() 方法从客户端接收数据,每次接收 1024 字节并解码为 utf - 8 格式。若接收数据为空(客户端断开连接),则跳出内层循环。
  13. 发送响应 :接收到客户端消息后,通过 input() 函数从控制台获取用户输入,作为响应消息,再用 send() 方法将其编码为 utf - 8 格式后发送给客户端。
  14. 连接管理 :利用 finally 块,无论内层循环如何结束(正常结束或异常中断 ),都确保调用 close() 方法关闭与客户端的套接字连接,释放资源 。

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

  • 问题1:代码运行错误
  • 问题1解决方案:通过PC进行检查,修改错误,询问老师

其他(感悟、思考等)

实验伊始,创建服务端和客户端的任务便需要我对 Socket 编程的原理有清晰的理解。Python 丰富的库函数为实现这一目标提供了便利,但其中端口的选择、套接字类型的设定以及连接的建立等细节问题,仍需小心谨慎地处理。每一次成功运行服务端监听端口,等待客户端连接的时刻,都让我感受到了网络通信底层机制的奇妙。
在加入文件操作的环节,从文件的打开、读取到写入,这一系列操作与网络通信的结合,为实验增添了新的复杂度。如何在服务端和客户端之间高效地传输文件内容,成为了关键所在。为了确保数据的完整性和准确性,我花费了大量时间调试代码,优化文件读取和写入的逻辑。

参考资料

posted @ 2025-04-15 20:28  孟雨欣  阅读(19)  评论(0)    收藏  举报