1. 主页
  2. Python基础到高级
  3. socket网络编程
  4. socketserver

socketserver

socketservier

SocketServer简化了网络服务器的编写。它有4个类:TCPServer,UDPServer,UnixStreamServer,UnixDatagramServer。这4个类是同步进行处理的,另外通过ForkingMixIn和ThreadingMixIn类来支持异步。

创建服务器的步骤。首先,你必须创建一个请求处理类,它是BaseRequestHandler的子类并重载其handle()方法。其次,你必须实例化一个服务器类,传入服务器的地址和请求处理程序类。最后,调用handle_request()(一般是调用其他事件循环或者使用select())或serve_forever()。

集成ThreadingMixIn类时需要处理异常关闭。daemon_threads指示服务器是否要等待线程终止,要是线程互相独立,必须要设置为True,默认是False。

无论用什么网络协议,服务器类有相同的外部方法和属性。

该模块在python3中已经更名为socketserver。

5种类型:BaseServer,TCPServer,UnixStreamServer,UDPServer,UnixDatagramServer。 注意:BaseServer不直接对外服务。

使用socketserver实现EchoServer服务

import socketserver
class EchoServer(socketserver.BaseRequestHandler):
    def setup(self):
        # 初始化工作,通常情况下不需要重写
        super().setup()

    def finish(self):
        # 清理工作,通常情况下也不需要重写
        super().finish()

    def handle(self):
        message = self.request.recv(1024).strip()
        self.request.send(message)
        

if __name__ == '__main__':
    server = socketserver.ThreadingTCPServer(('127.0.0.1', 1234), EchoServer)
    try:
        server.serve_forever()
    except KeyboardInterrupt:
        server.shutdown()
        server.server_close()   # 关闭socket server连接

这样一个简单的socker服务端就写出来了

socket客户端是可以使用with方法的,我们使用with方法来验证下socket 服务端是否正常

import socket
with socket.socket() as so:
    so.connect(('127.0.0.1', 1234))
    so.send(b'hello\n')
    print(so.recv(1024)) 

针对每个连接,server会初始化一个handler,并且调用handler的handle方法来处理这个连接

我们要如何帮助您?

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注