20244222 实验三《Python程序设计》实验报告

学号 20244222 《Python程序设计》实验3报告

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

1.实验内容

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

2. 实验过程及结果

(1)我选择和20244220陈彦竹一组,我作为服务端,陈彦竹作为客户端,并连接同一个局域网。接着构建数据传输通道,与端口绑定(bind),为保证实验数据独特性,我们选择用两人的学号结尾“20”和“22”组成端口,构建端口“2022”
(2)查询服务端IP地址,按win+R,输入cmd回车,在命令提示符界面中输入“IPconfig”,得到服务端IP地址。

(3)创建 socket 对象,将套接字绑定到地址,在AF_INET下,以元组(host,port)的形式表示地址。

将套接字绑定到地址,在AF_INET下,以元组(host,port)的形式表示地址,将套接字绑定到IP地址172.20.10.8的2022端口。

(4)构建socket.listen(backlog)函数,开始监听TCP传入连接。

(5)构建socket.accept()函数,接受TCP连接,用来接收和发送数据。

(6)编写while循环语句和if语句,创建一个无限循环,保持持续通信。并构建socket.recv().decode() 函数,从客户端套接字接收最多1024字节的数据并解码为UTF-8字符串。

(7)构建socket.send() 函数,将消息编码为UTF-8并发送给客户端。

(8)构建socket.close()函数,关闭连接。

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

  • 问题1:调试过程中客户端突然断开链接,思考能否让客户端自动重连。

  • 问题1解决方案:可以建立一个双循环结构:外层循环保持服务器持续运行。内层循环处理单个连接。当内层循环因连接断开退出时,会自动回到外层的accept()等待新连接。

  • 问题2:recv(1024)中的1024参数代表什么含义?

  • 问题2解决方案:通过上网搜索,知道1024 的单位是字节(Bytes),表示每次最多从网络缓冲区读取 1024字节(1KB) 的数据。如果客户端发送的数据超过1024字节,需要多次调用 recv() 才能完整接收。它不限制服务器和客户端之间能传输的总数据量,仅限制单次 recv() 调用能获取的数据块大小。但实际接收的数据可能小于1024,如果缓冲区中剩余数据不足1024字节,会返回当前所有可用数据,例如:客户端发送 "Hello"(5字节),recv(1024) 会返回 b'Hello'(而非等待凑满1024字节)。

  • 问题3:如何安全地关闭client_socket连接?

  • 问题3解决方案:可以调用shutdown()后再调用close(),shutdown()会通知对端连接即将终止。

其他(感悟、思考等)

这次实验学习啦Socket技术,并成功建立了服务器端和客户端。我了解到不同Socket类型的区别,例如:socket.AF_UNIX只能够用于单一的Unix系统进程间通信,而socket.AF_INET用于服务器之间网络通信。我学了相关Socket函数,如socket.listen(backlog)函数、socket.accept()函数、socket.send() 函数等等。令我印象最深的是和同伴建立连接,在一方代码出错时我们需要一起面对,才能高效完成任务。这和以往单独写代码不同,我们需要不断交流,互相帮助。同时,为了避免总是出错,给同伴带来麻烦,我编写代码时格外注意,避免粗心,这意外大大提高了我编写代码时的效率。当服务端和客户端建立好,成功对话时,我也意识到两个人的喜悦远超于一个人的,我们共享同一份成就感,促进我对日后人际关系的思考,我受益匪浅。

参考资料

posted @ 2025-04-17 00:12  H4n3_7uM  阅读(49)  评论(0)    收藏  举报