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

Python 程序设计实验报告
课程:《Python 程序设计》
班级:2542
姓名:梁晋源
学号:20254220
实验教师:王志强
实验日期:2026 年 4 月 28 日
必修 / 选修:公选课

  1. 实验内容
    本次实验基于 Python 的socket库,实现一个简单的TCP 客户端 - 服务器双向通信程序。核心目标包括:
    编写 TCP 客户端代码,实现与指定 IP 和端口的服务器建立连接。
    客户端支持向服务器发送文本消息,并接收服务器的响应消息。
    实现通过输入exit指令主动断开连接,结束聊天会话。
    验证客户端与服务器的通信流程,确保消息能正确发送、接收与解析。
  2. 实验过程及结果
    实验过程
    环境准备:在 PyCharm 中创建 Python 项目,新建SocketClient.py客户端文件(对应你截图中的代码),同时编写配套的SocketServer.py服务器文件,确保二者 IP 地址、端口号一致(实验中使用10.37.120.15和端口4210)。
    客户端代码编写:
    初始化socket对象,使用connect()方法连接服务器。
    编写循环逻辑,通过input()获取用户输入的消息,使用send()发送 UTF-8 编码的数据。
    实现exit退出判断,当用户输入exit时跳出循环,调用close()关闭连接。
    编写接收逻辑,通过recv()接收服务器响应,解码后按指定格式输出(如截图中的20254210李承轩: {data}格式)。
    运行与测试:
    先启动服务器端程序,等待客户端连接。
    再运行客户端程序,成功连接后控制台输出 “已连接服务端!输入 exit 退出聊天!”。
    在客户端输入消息(如截图中的404),服务器成功接收并响应,客户端正确显示服务器的回复内容。
    输入exit,客户端断开连接,会话结束。
    实验结果
    客户端成功与服务器建立 TCP 连接,实现了双向文本通信:
    客户端输入消息后,服务器能正确接收并返回响应,客户端控制台按格式打印服务器消息(如截图中输入404后,输出20254210李承轩: 404)。
    输入exit可正常退出聊天,客户端与服务器的连接安全断开,无程序报错。
    完整实现了 TCP 客户端的基础通信逻辑,实验流程符合预期。
  3. 实验过程中遇到的问题和解决过程
    问题 1:客户端无法连接服务器,程序抛出ConnectionRefusedError异常。
    解决方案:检查服务器是否已启动,确认客户端与服务器的 IP 地址、端口号完全一致;同时关闭电脑防火墙或放行 Python 程序,避免端口被拦截;排查 IP 地址是否为服务器的真实内网 IP,而非localhost或错误的虚拟 IP。
    问题 2:发送中文消息后,客户端接收服务器响应时出现UnicodeDecodeError解码错误。
    解决方案:统一客户端与服务器的编码格式,将发送和接收时的encode()与decode()参数均设置为utf-8,确保中文文本能正确编解码传输。
    问题 3:客户端发送消息后,服务器能收到,但客户端无法接收服务器的响应,程序一直阻塞在recv()方法。
    解决方案:检查服务器端是否实现了send()方法回复消息,确保服务器在接收客户端消息后,主动将响应数据发送回客户端;同时确认客户端recv()的缓冲区大小(如1024)设置合理,无数据截断问题。
    问题 4:输入exit退出后,程序报错,提示连接已关闭。
    解决方案:在客户端的退出逻辑中,先跳出循环,再调用client.close()关闭套接字;同时在接收数据时,增加对data == "exit"或空数据的判断,提前结束循环,避免对已断开的连接执行recv()操作。
    其他(感悟、思考等)
    通过本次 TCP 通信实验,我对网络编程的基础逻辑有了直观的理解:
    认识到socket是网络通信的核心接口,客户端与服务器的连接、数据传输都依赖它实现,IP 地址和端口号就像通信的 “地址门牌号”,二者必须完全匹配才能建立连接。
    体会到 TCP 协议 “面向连接、可靠传输” 的特点,客户端与服务器的交互需要严格遵循 “建立连接 - 数据传输 - 断开连接” 的流程,任何一方提前断开都会影响会话状态。
    也意识到网络通信中编码、异常处理的重要性,简单的文本传输也需要考虑编解码、连接中断等边界情况,否则很容易出现程序崩溃或数据乱码的问题。
    本次实验的客户端只是基础的单线程通信模型,后续可以拓展多线程服务器、群聊功能、异常重连等场景,进一步深化对网络编程的理解。
    参考资料
    《Python 编程:从入门到实践》(第 2 版),埃里克・马瑟斯
    Python 官方文档:socket模块使用指南(https://docs.python.org/3/library/socket.html)
    屏幕截图 2026-04-28 193956

屏幕截图 2026-04-28 200946

屏幕截图 2026-04-28 201722

屏幕截图 2026-04-28 205240

posted @ 2026-04-28 20:53  风无语  阅读(6)  评论(0)    收藏  举报