美文网首页
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