3 # Thierry Parmentelat <thierry.parmentelat@inria.fr>
4 # Copyright (C) 2010 INRIA
11 from optparse import OptionParser
13 def myprint(message, is_client=True):
14 now=time.strftime("%H:%M:%S", time.localtime())
15 id = 'tcpclient' if is_client else 'tcpserver'
16 print "*",now,'(%s)' % id, '--',message
19 def show_network_status(is_client):
20 myprint("ip address show", is_client=is_client)
21 subprocess.call(['ip','address','show'])
22 myprint("ip route show", is_client=is_client)
23 subprocess.call(['ip','route','show'])
25 class EchoRequestHandler(SocketServer.StreamRequestHandler):
27 line = self.rfile.readline()
28 self.wfile.write(line)
30 class UppercaseRequestHandler(SocketServer.StreamRequestHandler):
32 line = self.rfile.readline()
33 self.wfile.write(line.upper())
40 parser = OptionParser()
41 parser.add_option("-p", "--port", action="store", dest="port", type="int",
42 default=10000, help="port number")
43 parser.add_option("-a", "--address", action="store", dest="address",
44 default=socket.gethostname(), help="address")
45 parser.add_option("-t", "--timeout", action="store", dest="timeout", type="int",
48 (options, args) = parser.parse_args()
53 show_network_status(is_client=False)
55 server = SocketServer.TCPServer((options.address, options.port),
56 UppercaseRequestHandler)
60 t = threading.Thread(target=server.serve_forever)
61 t.setDaemon(True) # don't hang on exit
63 time.sleep(options.timeout)
66 server.serve_forever()
67 except KeyboardInterrupt as e:
68 print 'Bailing out on keyboard interrupt'
73 parser = OptionParser()
74 parser.add_option("-p","--port", action="store", dest="port", type="int",
75 default=10000, help="port number")
76 parser.add_option("-a","--address", action="store", dest="address",
77 default=socket.gethostname(), help="address")
78 parser.add_option("-s","--sleep", action="store", dest="sleep", type="int",
79 default=1, help="sleep seconds")
80 parser.add_option("-l","--loops", action="store", dest="loops", type="int",
81 default=1, help="iteration loops")
83 (options, args) = parser.parse_args()
89 for i in range(1,options.loops+1):
90 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
91 s.connect((options.address , options.port))
94 if s.send(mout) != len(mout):
95 myprint("cannot send %s"%mout.strip())
100 myprint("unexpected reception\ngot:%s\nexpected: %s",line,min)
103 myprint("OK:%s"%mout.strip())
104 # leave the connection open, but the last one (so 1 iter returns fast)
105 if i != options.loops:
106 time.sleep(options.sleep)
107 myprint("disconnecting")
113 sys.exit(exit_return)
115 if __name__ == '__main__':
116 for argv in sys.argv[1:]:
117 if argv.find("client") >= 0:
118 sys.argv.remove(argv)
120 elif argv.find("server") >= 0:
121 sys.argv.remove(argv)
123 print 'you must specify either --client or --server'