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

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

课程:《Python程序设计》
班级: 2442
姓名: 陈可
学号:20244210
实验教师:王志强
实验日期:2025年4月15日
必修/选修: 专选课

一、实验内容

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

二、实验过程及结果

1.服务端代码的编写与运行

(1)在开始编写代码前,学习Socket程序的相关知识,了解到其功能类似于电话双方的通话。
(2)进行注释:指明该Python文件的编码格式为UTF-8,再写明文件名、作者、日期和描述等基本信息,方便理解。

(3)导入模块:导入Python标准库中的socket模块,后续代码使用该模块提供的函数和类来创建Socket服务端。

(4)创建socket对象:socket.socket()是用于创建socket对象的函数;AF_INET表示使用IPv4地址族;SOCK_STREAM表示使用面向连接的TCP协议。

(5)绑定地址与端口:首先按“win+R”,输入cmd,再输入ipconfig查询到自己此时IP地址为“192.168.31.187”,再设置端口号为我的学号“4210”;通过bind()将socket绑定到上述指定的地址和端口。

(6)监听连接:sever_socket,listen(1)表示让服务器开始监听连接请求,参数“1”表示允许最大的排队连接数,当有客户端发起连接请求时,服务器会将其放入这个队列,并且显示“正在监听”等相关信息。

(7)接受客户端连接:通过“accept()”等待并接受客户端连接,连接成功后会显示和哪个客户端地址建立的连接。

(8)消息交互:通过“while True”创建一个循环,使服务端和客户端可以进行消息的交互。recv(1024)表示最多接受1024字节的客户端数据,使用UTF-8解码;若没有收到数据,则退出循环。通过input()输入给客户端的回复,send()将输入的消息编码为UTF-8后发送给客户端。

(9)关闭连接:如果客户端选择关闭连接,则服务端连接也关闭。

(10)完整代码如下:

(11)与20244207赵文萱同学进行连接,我是服务端,她是客户端。
我的运行结果如下:


她的运行结果如下:

2.客户端代码的编写与运行

(1)相关注释、导入socket模块、创建套接字对象的操作类似于服务端。

(2)连接服务端:输入服务端IP和端口,通过connect()主动发起连接请求。

(3)消息交互:与服务端类似,通过while True循环进行信息交互,通过input()输入内容后,通过send()发送UTF-8编码的消息,接收到服务端消息后,UTF-8解码后显示;无数据时自动终止连接。
对话终止控制:每次交互后都会询问是否继续,若输入“N”则终止通信。

(5)断开连接

(6)完整代码如下:

(7)再次与20244207赵文萱同学进行连接,我是客户端,她是服务端。(端口号使用她的学号4207)
我的运行结果如下:

她的运行结果如下:

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

  • 问题1:最开始不清楚逻辑,不清楚两台电脑的IP地址应填谁的,不清楚端口号的作用。
  • 问题1解决方案:询问老师,知道两台电脑均要通过输入服务端的IP地址和端口号。服务端查看IP地址,既可以在控制面板-网络中查看,也可以输入win+R,再输入cmd、ipconfig查看;而端口号是自己设定的。
  • 问题2:我当客户端,赵文萱当服务端时,我们的IP地址和端口号都没问题,但是运行时我的电脑不显示任何内容,她的电脑显示被我“积极拒绝”。
  • 问题2解决方案:询问老师,关闭了两台电脑的防火墙之后成功交互。

四、其他(感悟、思考等)

这次实验相不仅编写的程序相较于前两次实验难度稍大,还要在与他人尝试建立连接的过程中不断调整、配合,直至成功交互。在编写过程中,由于先是一步一步地跟着老师敲出代码,所以最初我对部分代码的含义并不理解,也无法理解里面的逻辑,以至于在与同学尝试建立连接时,不知道IP地址、端口号等的作用,更不知道对于这两个要输入什么。后来询问了老师,并且在课后让豆包一句一句解释每行代码的功能,我才有种“恍然大悟”的感觉,逐步理顺了socket程序的逻辑。关于python,我还只是个“门外汉”,希望能在对每节课知识的吸收中搭建知识体系,能在对每一行代码的理解与解释中找到自己的进步之道。

posted @ 2025-05-06 20:32  陈·可  阅读(48)  评论(0)    收藏  举报