美文网首页
python 创建一个TCP服务器

python 创建一个TCP服务器

作者: 孙广宁 | 来源:发表于2022-06-05 21:53 被阅读0次
    11.2创建一个通过TCP协议通客户端进行通信的服务器
    • 可以利用socketserver库
    from socketserver import BaseRequestHandler,TCPServer
    
    class EcoHandler(BaseRequestHandler):
        def handle(self):
            print("Got connection from",self.client_address)
            while True:
                msg = self.request.recv(8192)
                if not msg:
                    break
                self.request.send(mgs)
    
    
    if __name__ == '__main__':
        serv =TCPServer(('',2000),EchoHandler)
        serv.serve_forver()
    
    • 这份代码中我们定义了一个特殊的处理类,它实现了一个handle方法来服务客户端链接,这里request属性就代表着底层的客户端socket,而client_address中包含了客户端地址

    • 要测试这个服务端程序,首先运行该脚本,然后打开另一个Python进程链接到该服务端上

    >>> from socket import socket,AF_INET,SOCK_STREAM
    >>> s = socket(AF_INET,SOCK_STREAM)
    >>> s.connect(('localhost',20000))
    >>> s.send(b'hello')
    5
    >>> s.recv(8192)
    b'hello'
    >>>
    
    • 在许多情况下,定义一个类型稍有不同的处理类可能会更加简单
    • 下面的示例使用StreamRequestHandler作为基类,给底层的socket加上文件类型的接口
    from socketserver import StreamRequestHandler,TCPServer
    
    class EchoHandler(StreamRequestHandler):
        def handle(self):
            print("Got connection from",self.client_address)
            for line in self.rfile:
                self.wfile.write(line)
    
    if __name__ == '__main__':
        serv =TCPServer(('',20000),EchoHandler)
        serv.serve_forever()
    
    • socketserver模块默认方法只能是单线程,一次只能处理一个客户端,如果想要处理多个客户端,可以实例化ForkingTCPServer或者ThreadingTCPServer对象,如:
    if __name__ == '__main__':
        serv =ThreadingTCPServer(('',20000),EchoHandler)
        serv.serve_forever()
    
    • 可以使用多个客户端链接
    ~/ning-dashboard/tmp > python3 sockettest.py                                                                               10s
    Got connection from ('127.0.0.1', 54186)
    Got connection from ('127.0.0.1', 54292)
    

    相关文章

      网友评论

          本文标题:python 创建一个TCP服务器

          本文链接:https://www.haomeiwen.com/subject/aiqdmrtx.html