首页 > 编程语言 > 详细

python 39 socketserver 模块并发通信

时间:2019-08-28 19:44:33      阅读:95      评论:0      收藏:0      [点我收藏+]

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

python 39 socketserver 模块并发通信

原文:https://www.cnblogs.com/yzm1017/p/11425527.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!