当前位置:首页>python>Python开发从零开始-48.7-网络编程

Python开发从零开始-48.7-网络编程

  • 2026-10-11 06:30:58
Python开发从零开始-48.7-网络编程

接上文Python开发从零开始-48.6-网络编程,本文小编与大家分享 Python 网络编程的相关知识。

(二)socketServer 模块

socketserver 模块是 Python 标准库的一部分,它提供了一种简便的方式来编写网络服务器(即 socket 模块的服务端 socket)。

这个模块常用类包括:

  • BaseServer‌:所有服务器类的基类,提供了基本的服务器框架;

  • ‌TCPServer‌:用于创建 TCP 服务器,它是单线程串行处理请求;

  • ‌UDPServer‌:用于创建 UDP 服务器,它是单线程串行处理请求;

  • ThreadingTCPServer:用于创建 TCP 协议的服务器,并使用了多线程来处理多个客户端的连接;

  • ThreadingUDPServer:用于创建 UDP 协议的服务器,并使用了多线程来处理多个客户端的请求;

  • ThreadingMixIn:它是一个混入类(Mix-in Class)‌,用于为网络服务器添加‌多线程并发处理能力‌。它本身不能被直接实例化,必须与具体的服务器类(如 TCPServer)结合使用,通过继承来实现异步请求处理。定义子类时,‌必须将 ThreadingMixIn 放在基类列表首位‌,后接具体服务器类(如 TCPServer),因为 Python 的方法解析顺序(MRO)决定了混合类的方法会优先被调用;

  • BaseRequestHandler:所有请求处理器的超类,子类需继承该类,并重写 handle() 方法;

  • ‌StreamRequestHandler‌:用于处理 TCP 连接的请求处理器,子类需继承该类,并重写 handle() 方法;

  • ‌DatagramRequestHandler‌:用于处理 UDP 数据包的请求处理器,子类需继承该类,并重写 handle() 方法。

【小编提示】

Mixin(即 Mix-in,混入)是一种编程思想,在 Python 等面向对象语言中,通常它是实现了某种功能的类,用于被子类继承,并将功能组合到子类中。利用多重继承机制,子类可以继承不同功能的 Mixin 类,按需组合使用。当多个类都具备相同的功能时,可以考虑将该功能抽离成 Mixin 类。

1、创建 TCP 服务器

(1)创建单线程 TCP 服务器

可以使用 TCPServer‌ 创建单线程 TCP 服务器。

1)基本流程

① 导入 socketserver 模块

② 创建 TCP 请求处理器类

创建一个类继承自 BaseRequestHandler。该类需要重写 handle() 方法来定义当客户端连接时服务器应该执行的操作。

③ 创建 TCPServer 对象

创建 TCPServer 对象时,需传入服务器地址端口元组(host, post)和请求处理器类名。

④ 启动服务器并与客户端网络通信

调用 TCPServer 对象的 serve_forever() 方法可以启动服务器并持续运行,直至调用 shutdown() 方法来显式停止。客户端连接服务器端建立连接后 TCP 请求处理器类中的 handle() 方法会被调用处理业务逻辑。

⑤ 关闭网络连接

TCPServer 可以通过使用 with 语句来管理网络资源。如果有其他需求,也可以使用 server_close 方法显式的关闭网络连接。

2)编程示例

① 服务器端脚本(MyTCPHandler.py)

import socketserver# 创建 MyTCPHandler 类,继承自 socketserver.BaseRequestHandlerclass MyTCPHandler(socketserver.BaseRequestHandler):    # 重写 handle() 方法,处理网络通信逻辑    def handle(self):        # self.request 是客户端连接的 socket 对象        data = self.request.recv(1024).strip()        print(f"{self.client_address} 发送了:{data.decode()}")        # 大写客户端发来的信息并返回        self.request.sendall(data.upper())if __name__ == "__main__":    HOST, PORT = "localhost", 10002    # 创建 TCPServer 对象,并使用 with 语句进行网络连接资源管理    with socketserver.TCPServer((HOST, PORT), MyTCPHandler) as server:        print(f"服务器运行在 {HOST}:{PORT}")        server.serve_forever()

② 客户端脚本(tcpserver_client.py)

import socket# 创建 socket 对象tcp_client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 连接到服务器,因为是本地通信,所以使用 127.0.0.1tcp_client_socket.connect(("127.0.0.1", 10002))print("与服务器连接成功")send_msg = "abcdefg"print("发送给服务器消息:", send_msg)tcp_client_socket.sendall(send_msg.encode("utf-8"))# 接收小于 1024 字节的数据msg = tcp_client_socket.recv(1024)tcp_client_socket.close()# 解码从服务器接收的数据并打印print("服务器回复信息:", msg.decode('utf-8'))  

3)运行结果

首先运行服务器端脚本(MyTCPHandler.py),然后运行客户端脚本(tcpserver_client.py)。程序运行结果如下:

① 客户端

② 服务器端

受文章篇幅所限,下文将继续介绍 Python 网络编程的相关知识。

最新文章

随机文章