服务端:
1
2
3
4
5
6
7
8
9
10
11
|
#!/usr/bin/env import SocketServer class myMonitorHandler(SocketServer.BaseRequestHandler): def handle( self ): self .data = self .request.recv( 1024 ).strip() print "From %s : %s" % ( self .client_address, self .data) if __name__ = = "__main__" : HOST,PORT = '0.0.0.0' , 18000 server = SocketServer.ThreadingTCPServer((HOST,PORT),myMonitorHandler) server.serve_forever() server.close() |
客户端:
1
2
3
4
5
6
7
|
#!/usr/bin/env python import socket host,port = "10.23.30.191" , 18000 s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.connect((host,port)) s.send( "UP" ) ~ |
服务端运行结果:
From ('10.23.30.61', 45809) : UP
From ('10.23.30.61', 45810) : UP
From ('10.23.30.61', 45811) : UP
From ('10.23.30.61', 45812) : UP
From ('10.23.30.61', 45813) : UP
From ('10.23.30.61', 45814) : UP
From ('10.23.30.61', 45815) : UP
一。简单的多线程(服务器端添加了时间标签)
1.1 服务端
1
2
3
4
5
6
7
8
9
10
11
12
|
#!/usr/bin/env import datetime import SocketServer classmyMonitorHandler(SocketServer.BaseRequestHandler): def handle( self ): self .data = self .request.recv( 1024 ).strip() print "From %s : %s :%s" % ( self .client_address,datetime.datetime.now(), self .data) if__name__ = = "__main__" : HOST,PORT = '0.0.0.0' , 18000 server = SocketServer.ThreadingTCPServer((HOST,PORT),myMonitorHandler) server.serve_forever() server.close() |
1.2 客户端:
1
2
3
4
5
6
7
8
|
#!/usr/bin/envpython import socket host,port = "192.168.1.103" , 18000 s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.connect((host,port)) s.send( "UP" ) |
结果:
From('192.168.1.104', 58032) : 2013-12-24 06:47:03.620356 :UP
From('192.168.1.104', 58033) : 2013-12-24 06:47:05.464851 :UP
From('192.168.1.104', 58034) : 2013-12-24 06:47:06.273092 :UP
二.服务器端添加时间标签后(判断30秒更新发送)
2.1 首先要有字典存放客户端的信息
先定义1个空字典
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
#!/usr/bin/env importdatetime importSocketServer host_status = {} f = open ( 'client.txt' ) while 1 : line = f.readline().split() if len (line) = = 0 : break host_status[line[ 0 ]] = [] f.close() classmyMonitorHandler(SocketServer.BaseRequestHandler): def handle( self ): self .data = self .request.recv( 1024 ).strip() if self .client_address[ 0 ] inhost_status.keys(): host_status[ self .client_address[ 0 ]].append((datetime.datetime.now(), self .data)) print "From %s :%s :%s" % ( self .client_address,datetime.datetime.now(), self .data) else : print "sorry,IP %sis't in the monitor list!" % self .client_address[ 0 ] for t,m in host_status.items(): print t,m if__name__ = = "__main__" : HOST,PORT = '0.0.0.0' , 18000 server = SocketServer.ThreadingTCPServer((HOST,PORT),myMonitorHandler) server.serve_forever() server.close() |
解释:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
#!/usr/bin/env import datetime import SocketServer host_status = {} #定义个空子典用来存储客户端发送的信息和时间 f = open ( 'client.txt' ) #文件的读取 while 1 : line = f.readline().split() #文件的读取并分段 if len (line) = = 0 : break #结尾退出 host_status[line[ 0 ]] = [] #初始化字典,把文件中的ip设置为字典的key f.close() classmyMonitorHandler(SocketServer.BaseRequestHandler): def handle( self ): self .data = self .request.recv( 1024 ).strip() ifself.client_address[ 0 ] in host_status.keys(): #如果获取客户端ip在字典的列表的key中 host_status[ self .client_address[ 0 ]].append((datetime.datetime.now(), self .data)) #这儿采用追加的方式 print "From %s : %s :%s" % ( self .client_address,datetime.datetime.now(), self .data) #输出客户端的ip ,连接时间,发送的内容 else : print "sorry,IP %s is't in the monitor list!" % self .client_address[ 0 ] #不在提示 for t,m inhost_status.items(): #字典输出 printt,m #字典的输出 if__name__ = = "__main__" : HOST,PORT = '0.0.0.0' , 18000 server = SocketServer.ThreadingTCPServer((HOST,PORT),myMonitorHandler) server.serve_forever() server.close() |
本文出自 “lzt417” 博客
原文链接:http://lzt417.blog.51cto.com/804811/1344085