zoukankan      html  css  js  c++  java
  • Python学习——socketserver模块

    socketserver模块就是socket模块的封装。

    The socketserver module simplifies the task of writing network servers.

    socketserver一共有这么几种类型

    1
    class socketserver.TCPServer(server_address, RequestHandlerClass, bind_and_activate=True)

    This uses the Internet TCP protocol, which provides for continuous streams of data between the client and server. 

    1
    class socketserver.UDPServer(server_address, RequestHandlerClass, bind_and_activate=True)

    This uses datagrams, which are discrete packets of information that may arrive out of order or be lost while in transit. The parameters are the same as for TCPServer.

    1
    2
    class socketserver.UnixStreamServer(server_address, RequestHandlerClass, bind_and_activate=True)
    class socketserver.UnixDatagramServer(server_address, RequestHandlerClass,bind_and_activate=True)

    These more infrequently used classes are similar to the TCP and UDP classes, but use Unix domain sockets; they’re not available on non-Unix platforms. The parameters are the same as for TCPServer.

    There are five classes in an inheritance diagram, four of which represent synchronous servers of four types:

    +------------+
    | BaseServer |
    +------------+
          |
          v
    +-----------+        +------------------+
    | TCPServer |------->| UnixStreamServer |
    +-----------+        +------------------+
          |
          v
    +-----------+        +--------------------+
    | UDPServer |------->| UnixDatagramServer |
    +-----------+        +--------------------+


    创建一个socketserver 至少分以下几步:

    First, you must create a request handler处理类 class by subclassing the BaseRequestHandler class and overriding覆盖
    its handle() method; this method will process incoming requests.   
    你必须自己创建一个请求处理类,并且这个类要继承BaseRequestHandler,并且还有重写父亲类里的handle()
    Second, you must instantiate实例化 one of the server classes, passing it the server’s address and the request handler class.
    你必须实例化TCPServer ,并且传递server ip 和 你上面创建的请求处理类 给这个TCPServer
    Then call the handle_request() or serve_forever() method of the server object to process one or many requests.
    server.handle_request() #只处理一个请求
    server.serve_forever() #处理多个一个请求,永远执行

    让你的socketserver并发起来, 必须选择使用以下一个多并发的类

    class socketserver.ForkingTCPServer

    class socketserver.ForkingUDPServer

    class socketserver.ThreadingTCPServer

    class socketserver.ThreadingUDPServer

    基本的socketserver代码

     1 import socketserver
     2 
     3 class MyTCPHandler(socketserver.BaseRequestHandler):
     4     def handle(self):
     5         while True:
     6             try:
     7                 self.data = self.request.recv(1024).strip()
     8                 print("{} wrote:".format(self.client_address[0]))
     9                 print(self.data)
    10                 self.request.send(self.data.upper())
    11             except ConnectionResetError as e:
    12                 print("err",e)
    13                 break
    14 if __name__ == "__main__":
    15     HOST, PORT = "localhost", 9999
    16     # Create the server, binding to localhost on port 9999
    17     server = socketserver.ThreadingTCPServer((HOST, PORT), MyTCPHandler)
    18     server.serve_forever()
  • 相关阅读:
    HDU 1698 Just a Hook (区间更新+延迟标记)
    HDU 1754 I Hate It 线段树
    HDU 1847 Good Luck in CET-4 Everybody! (sg函数)
    博弈汇总
    Codeforces cf 713A Sonya and Queries
    hihoCoder 1082 : 然而沼跃鱼早就看穿了一切
    hihoCoder 1298 : 数论五·欧拉函数
    hdu 5821 Ball
    hdu 5818 Joint Stacks(栈的模拟)
    hdu 5802 Windows 10
  • 原文地址:https://www.cnblogs.com/Ian-learning/p/8462338.html
Copyright © 2011-2022 走看看