20244114张欣雅实验三《Python程序设计》实验报告

实验三
20244114张欣雅《Python程序设计》实验三报告
课程:《Python程序设计》
班级: 2441
姓名: 张欣雅
学号:20244114
实验教师:王志刚
实验日期:2025年4月15日
必修/选修: 公选课

  1. 实验内容
    本次实验运用 Python 语言构建服务端与客户端程序,借助 Socket 套接字(采用 TCP 协议)实现两者间的通信。在通信过程里,发送方(可由客户端或服务端担任)从文件读取内容,直接传输至接收方(相应的服务端或客户端)。
  2. 实验过程及结果
    实验过程
    服务端搭建:
    导入socket库用于网络连接操作。
    使用socket.socket(socket.AF_INET, socket.SOCK_STREAM)创建 TCP 套接字,绑定到指定地址和端口(例如('172.16.177.158', 8889)),并通过server_socket.listen(5)开启监听,等待客户端连接。
    在循环中,利用server_socket.accept()接受客户端连接。接收客户端发送的数据,将数据写入received_file.txt文件,完成操作后关闭客户端套接字。
    客户端搭建:
    创建 TCP 套接字并连接到服务端指定地址和端口。

    以二进制读取模式打开send_file.txt文件,读取内容后发送给服务端,操作结束后关闭客户端套接字。
    文件操作与传输流程:
    客户端以二进制读取模式打开文件,读取内容后直接发送给服务端。
    服务端接收数据

    角色转换(先客户端后服务端):
    完成客户端操作后,修改代码中套接字的角色设置,使其成为服务端。
    同样创建 TCP 套接字,绑定地址和端口并监听。

    等待新的客户端(可以是另一程序实例或修改后的原客户端代码以相反角色运行)连接,接收新客户端发送的数据并写入文件。
    代码托管至码云:

    实验结果
    服务端成功在指定端口监听,能够稳定接受客户端的连接请求。无论是初始作为服务端,还是角色转换后作为服务端,都能正常工作。
    客户端顺利从文件读取内容,准确无误地传输到服务端。当角色转换为客户端时,也能向新的服务端成功发送数据。
    服务端接收到数据后,成功将内容保存到文件,经对比,保存的文件内容与客户端发送的源文件内容完全一致。
    代码成功托管至码云仓库,在码云平台上可进行代码的查看、版本管理以及后续可能的协作开发。
  3. 实验过程中遇到的问题和解决过程
    问题 1:端口占用
    问题描述:在初次运行服务端后,再次尝试运行服务端(包括角色转换后的服务端启动)时,出现端口被占用的错误提示,导致服务端无法正常启动。
    问题 1 解决方案:通过命令行工具,使用netstat -ano | findstr :9999命令(查找占用该端口的进程 ID。然后在任务管理器中根据进程 ID 结束对应的进程,释放端口资源,使得服务端能够重新启动并绑定到指定端口。
    问题 2:客户端与服务端 IP 地址不匹配
    问题描述:将客户端部署到其他机器连接服务端时,始终无法连通。起初怀疑是 IP 地址问题,检查发现客户端代码中服务端 IP 被硬编码为127.0.0.1,修改为服务端真实 IP 后,依旧连接失败。进一步排查,原来是端口设置问题,服务端实际监听端口为 8889,而客户端代码中连接的是默认的 8888 端口,导致连接尝试一直失败。
    问题 2 解决方案:调整客户端代码,使服务端的 IP 和端口均可灵活配置。
    问题 3:Socket 连接超时
    问题描述:在客户端连接服务端时,偶尔出现连接超时的情况,无法建立起通信连接。
    问题 3 解决方案:检查网络环境,确认本地网络连接正常且无防火墙等软件阻止程序的网络访问。同时,优化客户端连接代码,增加连接超时设置,如client_socket.settimeout(10)(设置 10 秒连接超时),在连接超时时给出明确提示,让用户可以排查问题或重试连接。
    其他(感悟、思考等)
    在本次Socket通信实验中,我收获颇丰。起初,因客户端IP硬编码及端口号配置错误,导致跨机器连接失败,这使我深刻认识到网络参数准确性和环境适配性的重要,编写程序必须充分考虑网络配置的动态变化。解决数据接收不完整问题时,我明白了网络传输的不确定性,需构建稳健机制保障数据完整。代码托管到码云,也让我体验到代码管理工具在项目协作中的高效。
    这次实验全方位提升了我的编程能力与认知。未来,我打算持续强化网络知识学习,将理论紧密结合实践,力求在网络编程领域不断突破,开发出更稳定、高效的网络应用程序 。

参考资料

posted @ 2025-04-15 20:43  张欣雅  阅读(14)  评论(0)    收藏  举报