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()

    上面是一个最基本的写法

      

  • 相关阅读:
    UseControls ————用户自定义控件的textbox的传值问题
    listview 的用法 (asp.net3.5新增控件)
    DataList 中 HyperLink传递时多个参数怎么绑定
    fileupload 上传文件函数 把图片名用日期时间命名
    repeat 的两个事件ItemDataBound和ItemCommand
    dataset.xsd的定义(vs2008)
    asp.net 的框架问题 使多个页面在同一个页面中显示
    第八章 支持与自我了悟
    项目管理心得:一个项目经理的个人体会、经验总结(转)
    细说委托(转)
  • 原文地址:https://www.cnblogs.com/JayeHe/p/7282548.html
Copyright © 2011-2022 走看看