zoukankan      html  css  js  c++  java
  • python 39 socketserver 模块并发通信

    socketserver模块

    socketserver模块实现一个服务端与多个客户端通信。是在socket的基础上进行了一层封装,底层还是调用的socket。

    socketserver干了两件事:
    1、一个是循环建立链接的部分,每个客户链接都可以连接成功  
    2、一个通讯循环的部分,就是每个客户端链接成功之后,要循环的和客户端进行通信。
    
    # 服务端
    #类中查找属性的顺序:ThreadingTCPServer->ThreadingMixIn->TCPServer->BaseServer
    
    import socketserver
    
    class MyServer(socketserver.BaseRequestHandler):
        
        def handle(self):
            """
            必须用handle,因为源码中提供handle扩展的方法接口。
            self.request 相当于 conn
            self.client_address 相当于addr
            """
            while 1:
                from_client_msg = self.request.recv(1024)
                print(f'来自客户端{self.client_address}的消息:{from_client_msg.decode("utf-8")}')
                msg = input(">>>").encode('utf-8')
                self.request.send(msg)
            self.request.close()
    
    if __name__ == '__main__':
        
    	# 设置allow_reuse_address允许服务器重用地址
        socketserver.TCPServer.allow_reuse_address = True
        server = socketserver.ThreadingTCPServer(('127.0.0.1',8080),MyServer)   # 进行bind、listen,连接一个开启一个线程
        server.serve_forever()   # 一直开启服务,并且进行了accept,创建conn,addr
    
    # 客户端(可开启多个)
    import socket
    
    client = socket.socket()
    client.connect(('127.0.0.1',8080))
    
    while 1:
        to_server_msg = input('>>>').encode('utf-8')
        client.send(to_server_msg)
        from_server_msg = client.recv(1024)
        print(f'来自客户端消息:{from_server_msg.decode("utf-8")}')
    client.close()
    
  • 相关阅读:
    20191211 HNOI2017 模拟赛 问题A
    20191211 HNOI2017模拟赛 C题
    BZOJ 3681 Arietta
    netcore3.1中的Json操作
    netcore2.2出现的新特性HealthCheck
    MVC为什么要使用TagHelper?
    psql备份csv文件
    DataAnnotations的使用及细节处理
    记录一次mac安装node遇到的错误
    记录一次netcore3.0 code first使用迁移命令报错问题
  • 原文地址:https://www.cnblogs.com/yzm1017/p/11425527.html
Copyright © 2011-2022 走看看