20244225 实验三《python程序设计》实验报告
20244225 《Python程序设计》实验三报告
课程:《Python程序设计》
班级: 2442
姓名: 孟雨欣
学号:20244225
实验教师:王志强
实验日期:2024年4月15日
必修/选修: 公选课
1.实验内容
创建服务端和客户端,服务端在特定端口监听多个客户请求。客户端和服务端通过Socket套接字(TCP/UDP)进行通信。
2. 实验过程及结果
(1)创建服务端和客户端,选择一个通信端口,用Python语言编程实现通信演示程序;
(2)要求包含文件的基本操作,例如打开和读写操作。
(3)要求发送方从文件读取内容,加密后并传输;接收方收到密文并解密,保存在文件中。
(4)程序代码托管到码云。




这段 Python 程序具体功能如下:
(1) 创建套接字并绑定监听
- 创建 socket 对象:通过
socket.socket(socket.AF_INET, socket.SOCK_STREAM)创建一个基于 IPv4 协议的 TCP 套接字。 - 绑定地址和端口:将套接字绑定到本地地址
localhost的8888端口 。 - 开始监听:使用
listen(1)方法让服务器开始监听,同时设置允许的最大连接数为 1 。
(2) 与客户端交互 - 等待连接:进入无限循环,通过
accept()方法等待客户端连接,连接成功后打印客户端地址。 - 接收消息:进入内层循环,持续接收客户端发送的数据,将接收到的字节数据解码为 UTF - 8 格式字符串并打印。若接收数据为空,则跳出内层循环。
- 发送响应:通过
input()函数从控制台获取用户输入内容,作为响应消息,将其编码为 UTF - 8 格式后发送给客户端。 - 关闭连接:当内层循环结束(如客户端断开连接),通过
finally块确保关闭与客户端的连接。
这段代码设计思路具体如下:
(1)初始化服务器 - 创建套接字 :利用
socket.socket()创建 TCP 套接字,指定AF_INET(IPv4 地址族 )和SOCK_STREAM(TCP 协议 ),这是基于 TCP 进行网络通信的基础。 - 绑定地址和端口 :通过
bind()方法将套接字与本地localhost的8888端口绑定,明确服务器监听的网络位置,以便客户端能准确连接。 - 设置监听 :使用
listen()方法让服务器进入监听状态,listen(1)表示允许最大 1 个未完成连接排队,准备接受客户端连接请求。
(2)与客户端交互流程 - 等待连接 :通过无限
while循环,使用accept()方法阻塞等待客户端连接。一旦有客户端连接,获取与客户端通信的套接字client_socket和客户端地址client_address,并打印连接信息。 - 接收消息 :进入内层无限
while循环,使用recv()方法从客户端接收数据,每次接收1024字节并解码为utf - 8格式。若接收数据为空(客户端断开连接),则跳出内层循环。 - 发送响应 :接收到客户端消息后,通过
input()函数从控制台获取用户输入,作为响应消息,再用send()方法将其编码为utf - 8格式后发送给客户端。 - 连接管理 :利用
finally块,无论内层循环如何结束(正常结束或异常中断 ),都确保调用close()方法关闭与客户端的套接字连接,释放资源 。
3. 实验过程中遇到的问题和解决过程
- 问题1:代码运行错误
- 问题1解决方案:通过PC进行检查,修改错误,询问老师
其他(感悟、思考等)
实验伊始,创建服务端和客户端的任务便需要我对 Socket 编程的原理有清晰的理解。Python 丰富的库函数为实现这一目标提供了便利,但其中端口的选择、套接字类型的设定以及连接的建立等细节问题,仍需小心谨慎地处理。每一次成功运行服务端监听端口,等待客户端连接的时刻,都让我感受到了网络通信底层机制的奇妙。
在加入文件操作的环节,从文件的打开、读取到写入,这一系列操作与网络通信的结合,为实验增添了新的复杂度。如何在服务端和客户端之间高效地传输文件内容,成为了关键所在。为了确保数据的完整性和准确性,我花费了大量时间调试代码,优化文件读取和写入的逻辑。

浙公网安备 33010602011771号