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

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

本文实例讲述了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

        标签:python,网络编程,socketserver
        0
        投稿

        猜你喜欢

      • phpinfo 系统查看参数函数代码

        2024-05-13 09:56:51
      • 使用 Python 实现文件递归遍历的三种方式

        2022-08-19 18:49:08
      • Python3.7.0 Shell添加清屏快捷键的实现示例

        2023-02-25 13:39:23
      • MySQL备份与恢复之保证数据一致性(5)

        2024-01-16 19:16:20
      • 深入理解MySQL重做日志 redo log

        2024-01-13 22:25:36
      • 详解python中的闭包

        2023-09-25 13:37:33
      • pip如何用pipdeptree查看包依赖

        2022-07-28 01:56:26
      • mysql 设置自动创建时间及修改时间的方法示例

        2024-01-24 08:12:55
      • 利用tkinter实现下拉框联动

        2022-02-12 14:55:27
      • Go语言kylin任务自动化实例详解

        2024-05-08 10:24:04
      • Python绘制圣诞树+落叶+雪花+背景音乐+浪漫弹窗 五合一版圣诞树

        2022-11-20 01:32:46
      • SQLSERVER 本地查询更新操作远程数据库的代码

        2023-07-23 21:58:55
      • Python2和Python3的共存和切换使用

        2022-12-26 13:05:20
      • 详解vue-router 2.0 常用基础知识点之router.push()

        2024-04-09 10:49:35
      • 浅谈Series和DataFrame中的sort_index方法

        2022-07-01 05:53:22
      • python实现计数排序与桶排序实例代码

        2023-12-28 11:32:37
      • Python urllib库的使用指南详解

        2021-07-08 20:50:57
      • Go语言使用swagger生成接口文档的方法

        2023-08-28 06:23:23
      • 代码解析python标准库logging模块

        2023-09-21 16:31:32
      • MySQL 8忘记密码的最佳处理方式浅析

        2024-01-28 17:44:32
      • asp之家 网络编程 m.aspxhome.com