网络编程
位置:首页>> 网络编程>> Python编程>> python网络编程:socketserver的基本使用方法实例分析

python网络编程:socketserver的基本使用方法实例分析

作者:随风行云  发布时间:2023-11-26 21:33:50 

标签:python,网络编程,socketserver

本文实例讲述了python网络编程:socketserver的基本使用方法。分享给大家供大家参考,具体如下:

本文内容:

  • socketserver的介绍

  • socketserver的使用

  • socketserver的异步服务端

首发时间:2018-03-21


也可以使用socketserver来创建socket


socketserver的介绍:

  • socketserver是标准库中的一个高级模块

  • socketserver可以简化创建客户端跟创建服务端的代码


socketserver的使用:

  • 首先导入模块:import socketserver

  • 初始化控制器类Handler【Handler是一个继承BaseRequestHandler的类Handler中的handle方法决定了每一个连接过来的操作】 【控制器类的类名可以是其他的,不一定是Handler,只要继承了BaseRequestHandler就行】


    • self.request属性是套接字对象,所以使用self.request.xxxx调用套接字的函数

    • self.server包含调用处理程序的实例

    • self.client_address是客户端地址信息

    • init():初始化控制设置,初始化连接套接字,地址,处理实例等信息

    • handle(): 定义了如何处理每一个连接。

    • setup(): 在handle()之前执行.一般用作设置默认之外的连接配置

    • finish():在handle()之后执行。

    • 变量:


    • 定义服务端类型【将Handler类和服务端的地址端口参数传入】:


      • server=socketserver.UDPServer((HOST,PORT),Handler)

      • server=socketserver.TCPServer((HOST,PORT),Handler)【Handler】

      • TCPServer 支持ipv4的TCP协议的服务器。

      • UDPServer 支持ipv4的UDP协议的服务器。

      • 运行服务端


        • server.shutdown()

        • server.serve_forever()

        • python网络编程:socketserver的基本使用方法实例分析

        • 持续循环运行:serve_forever(),即使一个连接报错了,但不会导致程序停止,而是会持续运行,与其他客户端通信

        • 停止server_forever:shutdown()

        服务端:


        import socketserver

        class MyTCPHandler(socketserver.BaseRequestHandler):
        def handle(self):
         try:
          while True:
           self.data=self.request.recv(1024)
           print("{} send:".format(self.client_address),self.data)
           if not self.data:
            print("connection lost")
            break
           self.request.sendall(self.data.upper())
         except Exception as e:
          print(self.client_address,"连接断开")
         finally:
          self.request.close()
        def setup(self):
         print("before handle,连接建立:",self.client_address)
        def finish(self):
         print("finish run after handle")

        if __name__=="__main__":
        HOST,PORT = "localhost",9999
        server=socketserver.TCPServer((HOST,PORT),MyTCPHandler)

        server.serve_forever()

        客户端:


        import socket

        client=socket.socket()

        client.connect(('localhost',9999))
        while True:
        cmd=input("(quit退出)>>").strip()
        if len(cmd)==0:
         continue
        if cmd=="quit":
         break
        client.send(cmd.encode())
        cmd_res=client.recv(1024)
        print(cmd_res.decode())

        client.close()

        socketserver的异步服务端:

        多线程:ThreadingTCPServer

        多进程:ForkingTCPServer(Unix)

        多线程版:


        import socketserver

        class MyTCPHandler(socketserver.BaseRequestHandler):
        def handle(self):
         try:
          while True:
           self.data=self.request.recv(1024)
           print("{} send:".format(self.client_address),self.data)
           if not self.data:
            print("connection lost")
            break
           self.request.sendall(self.data.upper())
         except Exception as e:
          print(self.client_address,"连接断开")
         finally:
          self.request.close()
        def setup(self):
         print("before handle,连接建立:",self.client_address)
        def finish(self):
         print("finish run after handle")

        HOST,PORT = "localhost",9999

        server=socketserver.ThreadingTCPServer((HOST,PORT),MyTCPHandler)#多线程版
        server.serve_forever()

        希望本文所述对大家Python程序设计有所帮助。

        来源:https://www.cnblogs.com/progor/p/8617042.html

        0
        投稿

        猜你喜欢

        手机版 网络编程 asp之家 www.aspxhome.com