zoukankan      html  css  js  c++  java
  • python小白-day8 socketserver模块

    SocketServer模块

    SocketServer内部使用 IO多路复用 以及 “多线程” 和 “多进程” ,从而实现并发处理多个客户端请求的Socket服务端。即:每个客户端请求连接到服务器时,Socket服务端都会在服务器是创建一个“线程”或者“进程” 专门负责处理当前客户端的所有请求。


    ThreadingTCPServer

    ThreadingTCPServer实现的Soket服务器内部会为每个client创建一个 “线程”,该线程用来和客户端进行交互。

    1、ThreadingTCPServer基础

    使用ThreadingTCPServer:

    • 创建一个继承自 SocketServer.BaseRequestHandler 的类

    • 类中必须定义一个名称为 handle 的方法

    • 启动ThreadingTCPServer

    ​多并发实例:

    服务端:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #!/usr/bin/env python
    import socketserver
    class MyTCPHandler(socketserver.BaseRequestHandler):
        def handle(self):  #handle函数必须重新定义
            while True:
                print('new conn:',self.client_address)
                data = self.request.recv(1024)
                if not data:break
                print('client says:',data.decode())
                self.request.send(data)
    if __name__ == '__main__':
        host,port = 'localhost',50007
        server = socketserver.ThreadingTCPServer((host,port),MyTCPHandler)
        server.serve_forever()

    客户端:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #!/usr/bin/env python
    import socket
    ip_port = ('127.0.0.1',50007)
     
     
    sk = socket.socket()
    sk.connect(ip_port)
    while True:
        user_input = input('>>:')
        sk.send(bytes(user_input,'utf8'))
        server_reply = sk.recv(1024)
        print('server reply:',str(server_reply,'utf8'))
    sk.close()






  • 相关阅读:
    mac修改brew源
    分屏工具xpanes
    MySQL自增id不连续问题
    Ubuntu16.04安装zkui
    antlr解析hive语句
    Elasticsearch学习笔记——索引模板
    Elasticsearch6.2.1安装elasticsearch-sq插件
    多用户同时操作一条Mysql记录问题
    Nexus上传npm包
    Nginx请求转发
  • 原文地址:https://www.cnblogs.com/hetan/p/5274219.html
Copyright © 2011-2022 走看看