zoukankan      html  css  js  c++  java
  • python SocketServer

    SocketServer

    常用类:

      socketserver.TCPServer()  # 一对一

      socketserver.ThreadingTCPServer() # 多并发

      socketserver.UDPServer()  # 一对一

      socketserver.ThreadingUDPServer() # 多并发

      

    不常用类:

      socketserver.UnixStreamServer()

      socketserver.UnixDatagramServer()

    创建 socketserver

    Request Handler Objects

    class socketserver.BaseRequestHandler

    This is the superclass of all request handler objects. It defines the interface, given below. A concrete request handler subclass must define a new handle() method, and can override any of the other methods. A new instance of the subclass is created for each request.

    setup()

    Called before the handle() method to perform any initialization actions required. The default implementation does nothing.

    handle()

    This function must do all the work required to service a request. The default implementation does nothing. Several instance attributes are available to it; the request is available as self.request; the client address as self.client_address; and the server instance as self.server, in case it needs access to per-server information.

    The type of self.request is different for datagram or stream services. For stream services,self.request is a socket object; for datagram services, self.request is a pair of string and socket.

    finish()

    Called after the handle() method to perform any clean-up actions required. The default implementation does nothing. If setup() raises an exception, this function will not be called.

     1 import socketserver
     2 
     3 
     4 # 第一步 创建一个handler类,继承socketserver.BaseRequestHandler
     5 class TCPHandler(socketserver.BaseRequestHandler):
     6     
     7     # 重写handle方法
     8     def handle(self):
     9 
    10         while True:
    11             try:
    12                 self.data = self.request.recv(1024).strip()
    13                 print('from %s' % self.client_address[0])
    14                 print(self.data)
    15                 self.request.send(self.data.upper())
    16             except ConnectionResetError as e:
    17                 print(self.client_address, e)
    18                 break
    19 
    20 if __name__ == '__main__':
    21 
    22     HOST, POST = 'localhost', 9999
    23     # 第二步 实例化一个server,把(HOST, POST)和上面的handler类传进去
    24     server = socketserver.ThreadingTCPServer((HOST, POST), TCPHandler)
    25     # ForkingTCPServer 多进程--这个在windows上不好使
    26     # server = socketserver.ForkingTCPServer((HOST, POST), TCPHandler)
    27     # 第三部,开启服务,serve_forever(),处理多个请求,永远执行
    28     server.serve_forever()

    上面是一个最基本的写法

      

  • 相关阅读:
    BZOJ1050: [HAOI2006]旅行comf(并查集 最小生成树)
    洛谷P1762 偶数(找规律)
    抽象类的基本概念------abstract
    百度地图小图标没有显示的解决方案
    nfs:server 172.168.1.22 not responding,still trying问题解决方法 平台为RealARM 210平台
    大话分页(二)
    In App Purchases(IAP 应用程序內购买): 完全攻略
    快速修改数组的问题
    64位linux中使用inet_ntoa报错处理
    CDN和双线机房相比有何优势
  • 原文地址:https://www.cnblogs.com/JayeHe/p/7282548.html
Copyright © 2011-2022 走看看