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