Python网络编程实验:TCP与UDP套接字交互

需积分: 11 3 下载量 161 浏览量 更新于2024-08-04 1 收藏 253KB DOC 举报
"实验五、Python网络编程 -2022.doc" 实验五是一个关于Python网络编程的实践项目,旨在让学生掌握使用TCP/IP协议创建客户端和服务器,以及使用UDP协议进行相同操作。实验中,学生需要设计两个部分:TCP和UDP的数据传输。首先,客户端需获取用户输入的学生ID、姓名、年龄和分数,并将这些信息发送到服务端。服务端接收到这些数据后,将其写入到一个文本文件中,每条信息占用一行。此外,实验还要求在客户端使用PyQt5库构建一个图形界面,实现与服务器的聊天功能,包括发送和接收消息。服务器端则需要通过TCP协议接收并回应消息,同时,所有交互内容需要存储在数据库的表中。 实验内容详细展开如下: 1. TCP部分: - 服务端:使用`socket`模块创建TCP套接字,绑定到本地IP地址'0.0.0.0'和端口8888,监听最多5个连接。当有客户端连接时,接收客户端发送的数据,将其解码并打印,然后写入到'test.txt'文件中。如果收到空数据,表示客户端关闭了连接,服务端也结束。每次接收完成后,向客户端发送确认消息。 ```python # 服务端代码片段 c, addr = s.accept() while True: data = c.recv(1024) print('接受到来自客户端的信息:', data.decode()) if not data: break fp = open('test.txt', 'a', encoding='UTF-8') fp.write('\n' + str(data.decode())) fp.close() n = c.send('收到!'.encode()) ``` - 客户端:同样使用`socket`模块创建TCP套接字,连接到服务器的IP和端口。然后在循环中,获取用户输入的学生信息,编码后发送给服务器。 ```python # 客户端代码片段 s.connect(('localhost', 8888)) while True: id = input('请输入学生编号:') name = input('请输入学生姓名:') age = int(input('请输入学生年龄:')) score = input('请输入学生分数:') data = f'{id},{name},{age},{score}'.encode() s.send(data) ``` 2. UDP部分: - UDP通信不涉及连接,因此没有`accept()`方法,而是直接创建套接字并绑定到指定端口,然后使用`sendto()`和`recvfrom()`函数进行数据交换。 3. PyQt5客户端界面: - 使用PyQt5构建一个GUI,包含连接按钮、发送按钮、接收按钮、文本框等元素。点击连接按钮建立TCP连接,发送按钮将用户名和消息发送到服务器,接收按钮则在文本框中显示服务器的回复。 4. 数据库存储: - 为了将服务器端和客户端的通信内容存储在数据库中,可以使用如SQLite或MySQL等数据库,使用Python的数据库接口(如`sqlite3`或`pymysql`)来执行相应的SQL语句,创建表格并插入记录。 实验过程中,学生需要详细记录实验步骤,并对结果进行截图,以展示TCP和UDP两种方式下客户端与服务器的交互情况。这有助于巩固理解网络编程的基本概念和实际应用。