socket并发通信的几种方式
1、socketserver
socketserver模块是基于socket而来的模块,内部使用IO多路复用以及多线程和多进程,从而实现并发处理客服端请求的Socket服务器。
即:每个客户端连接到服务器Socket服务端都会在服务端创建一个线程或者进程专门负责处理当前客户端的所有请求。
import socketserver class MyServer(socketserver.BaseRequestHandler): def handle(self): # print self.request,self.client_address,self.server conn = self.request conn.sendall('欢迎致电 10086,请输入1xxx,0转人工服务.'.encode()) Flag = True while Flag: data = conn.recv(1024) if data.decode() == 'exit': Flag = False elif data.decode() == '0': conn.sendall('通过可能会被录音.balabala一大推'.encode()) else: conn.sendall('请重新输入.'.encode()) if __name__ == '__main__': server = socketserver.ThreadingTCPServer(('127.0.0.1',8009),MyServer) server.serve_forever()
import socket ip_port = ('127.0.0.1',8009) sk = socket.socket() sk.connect(ip_port) sk.settimeout(5) while True: data = sk.recv(1024) print('receive:', data.decode()) inp = input('please input:') sk.sendall(inp.encode()) if inp == 'exit': break sk.close()