#coding: utf-8__author__ = ' similarface ' import os,socket,threading,socketserverserver_host= ' localhost ' server_port= 0buf_size=1024echo_msg= ' HELLO ' class Forkedclient (): Def __init__ (self,ip,port): #建立sock self.sock=socket. Socket (Socket.af_inet,socket. SOCK_STREAM) #连接server Self.sock.connect ((ip,port)) def run (self): #获取当前的进程号 current_proces S_id=os.getpid () print ' PID%s: ' '%s ' '% (current_process_id,echo_msg) sent_data_length = Self.sock.send (ECHO _msg) print (' Send:%d Long data '% sent_data_length) #sever response Response=self.sock.recv (buf_size) Print "PID%s Received:%s"% (Current_process_id,response) def shutdown (self): "Cleanup sock resources: RET urn: "' self.sock.close () class Forkingserverrequesthandler (Socketserver.baserequesthandler): def Handle (self): #接受客户端的数据 data=self.request.recv (buf_size) #当前的进程号码 CURRENT_PROCESS_ID=OS.GETPI D () #返回的数据包 response= '%s:%s '% (current_process_id, data) print "server returned [Current_process_id:data] =[%s]" %response #发送返回数据 self.request.send (response) Returnclass Forkingserver (socketserver.forkingmixin,so Cketserver.tcpserver): Passdef main (): #建立server server=forkingserver ((server_host,server_port), forkingserverrequ Esthandler) #获取IP and port IP, port = server.server_address # Retrieve The port number #服务进程 Server_thread = Threa Ding. Thread (target=server.serve_forever) #是否放入后台 Server_thread.setdaemon (True) # don ' t hang on exit #启动 Server_thre Ad.start () print ' Server loop running PID:%s '%os.getpid () # Launch the client (s) client1 = forkedclient (IP, PO RT) Client1.run () Client2 = forkedclient (IP, Port) client2.run () # Clean them up server.shutdown () Clie Nt1.shutdown () Client2.shutdown () server.socket.close () if __name__ = = ' __main__ ': Main ()
Python Network programming socket multi-process