python socket监控软件框架
服务器端:
#!/usr/bin/env python import SocketServer import datetime import pickle pfile ='h_dic.pkl' host_status = {} f = open('client.txt') while True: line = f.readline().split() if len(line)==0:break host_status[line[0]] = [] f.close() class myMonitorHandler(SocketServer.BaseRequestHandler): '''This is the Monitor server''' def handle(self): recv_data = self.request.recv(1024) if self.client_address[0] == '192.168.177.130': f = file(pfile,'w') pickle.dump(host_status,f) f.close() if self.client_address[0] in host_status.keys(): host_status[self.client_address[0]].append((datetime.datetime.now(),recv_data)) print'From %s: %s %s'%(self.client_address,datetime.datetime.now(),recv_data) else: print'sorry,ip % is not in the monitor list'% self.client_address[0] for t,m in host_status.items(): print t,m if __name__ == "__main__": host,port = '',18000 server = SocketServer.ThreadingTCPServer((host,port),myMonitorHandler) server.serve_forever()
客户端:
import socket import time host,port = '192.168.177.130',18000 while True: s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.connect((host,port)) s.send('up') s.close() time.sleep(30)
辅程序端:
#!/usr/bin/env python import pickle import datetime f = file('h_dic.pkl','rb') host_status = pickle.load(f) for h,m in host_status.items(): if len(m) !=0: old_time = m[-1][0] time_diff = (datetime.datetime.now() - old_time).seconds if time_diff > 30: print 'NO data received from %s for %s,please check'%(h,time_diff) else: print h,(datetime.datetime.now() - old_time).seconds