在单进程的socket的程序的基础上,实现多进程并发效果的思路具体是:在server端开启“连接循环”,每创建一次连接就生成一个Process对象进行server-client的互动,而client端不用作任何变化,由于对于client来讲每运行一次程序就至关于与server端创建了一个连接。并发
具体代码以下:socket
# -*- coding: utf-8 -*- # -*- Author: WangHW -*- import socket import os from multiprocessing import Process #多进程开启的程序 def talk(conn): # 通讯循环 while 1: try: data = conn.recv(1024) if not data: break print('client <%s> data:%s' %(os.getpid(),data.decode('utf-8'))) conn.send(data.upper()) except ConnectionResetError: break conn.close() #socket创建链接循环的程序 def server(ip,port): whw_server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) whw_server.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) whw_server.bind((ip,port)) whw_server.listen(5) # 连接循环 while 1: conn, addr = whw_server.accept() #生成对象,每创建一个连接就启动一个进程 p = Process(target=talk,args=(conn,)) p.start() if __name__ == '__main__': server('127.0.0.1',9000)
# -*- coding: utf-8 -*- # -*- Author: WangHW -*- import socket whw_client = socket.socket(socket.AF_INET,socket.SOCK_STREAM) whw_client.connect(('127.0.0.1',9000)) while 1: msg = input('>>>:').strip() if not msg: continue whw_client.send(msg.encode('utf-8')) data = whw_client.recv(1024) print('Server Data:',data.decode('utf-8'))
运行效果以下:ide
如上图所示:咱们能够看到不一样进程(由ID标识)的client与server的交互过程~spa