20234105 2024-2025-2 《Python程序设计》实验三报告
课程:《Python程序设计》
班级: 2341
姓名: 史宇凡
学号:20234105
实验教师:王志强
实验日期:2025年4月15日
必修/选修: 公选课
1.实验内容
(1)创建服务端和客户端,服务端在特定端口监听多个客户请求;
(2)客户端和服务端通过Socket套接字(TCP/UDP)进行通信。
2. 实验过程及结果
服务端过程:
(1)用import导入socket模块,创建套接字,并标定IPv4地址族和TCP协议
其中运用bind()以进行连接
注:本次实验,我选取命令提示符方法查找IPv4地址族,过程如下:
a. 按win+R,输入cmd,打开命令提示符
b. 输入命令ipconfig即可显示本机地址族
(2)设置监听和客户端连接,并使其弹出相关提示“服务器正在监听”“接受来自…的监听”
其中“listen(1)”表示只允许接入一台服务器,多余不予应答
(3)使用while语句构建循环体系,为服务器和客户端的多次连接搭建环境
运用etf-8编码,1024为可通讯最大字数,超过1024则通讯中断
(4)套接字结束,代码编写完毕
(5)完整代码如下
(6)尝试连接进行实验,以下为过程
**客户端过程**
(1)用import导入socket模块,创建套接字
(2)搭建连接
(3)使用while语句提供对话循环
(4)完整代码如下
(5)尝试连接进行实验,以下为过程
最后登录gitee托管云,完成本次实验
3. 实验过程中遇到的问题和解决过程
- 问题1:首次运行服务端正常,但重启时提示“端口已被占用”;
- 问题1解决方案:程序未正确关闭导致端口未释放,使用命令行工具netstat -ano查找占用端口的进程。
- 问题2:收发中文字符时显示为乱码;
- 问题2解决方案:使用UTF-8统一编码格式。
其他(感悟、思考等)
本次实验中我学会灵活运用socket通信技术,并且在课堂知识基础上,课后进行知识拓展,比如我学会了多线连接,通过以下代码即可实现:
while True:
client_socket, addr = server.accept()
# 为每个客户端创建新线程
thread = threading.Thread(target=handle_client, args=(client_socket,))
thread.start()
回顾本次实验,并非一帆风顺,在请教老师同学、搜索网页教程等努力后一点点修正错误、成功做出,在这个阶段,增长的不只是对python的理解,更是面对问题冷静分析、积极寻找对策的能力。
参考资料
https://docs.python.org/3/library/socket.html
https://www.baeldung.com/java-nio-vs-io
https://www.baeldung.com/java-secure-socket