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()

猜你喜欢

转载自www.cnblogs.com/yzm1017/p/11425527.html