93 lines · 2.0 KB · Python
RawDownload
#! /usr/bin/env python # Test network throughput.## Usage:# 1) on host_A: throughput -s [port]                    # start a server# 2) on host_B: throughput -c  count host_A [port]      # start a client## The server will service multiple clients until it is killed.## The client performs one transfer of count*BUFSIZE bytes and# measures the time it takes (roundtrip!).  import sys, timefrom socket import * MY_PORT = 50000 + 42 BUFSIZE = 1024  def main():    if len(sys.argv) < 2:        usage()    if sys.argv[1] == '-s':        server()    elif sys.argv[1] == '-c':        client()    else:        usage()  def usage():    sys.stdout = sys.stderr    print 'Usage:    (on host_A) throughput -s [port]'    print 'and then: (on host_B) throughput -c count host_A [port]'    sys.exit(2)  def server():    if len(sys.argv) > 2:        port = eval(sys.argv[2])    else:        port = MY_PORT    s = socket(AF_INET, SOCK_STREAM)    s.bind(('', port))    s.listen(1)    print 'Server ready...'    while 1:        conn, (host, remoteport) = s.accept()        while 1:            data = conn.recv(BUFSIZE)            if not data:                break            del data        conn.send('OK\n')        conn.close()        print 'Done with', host, 'port', remoteport  def client():    if len(sys.argv) < 4:        usage()    count = int(eval(sys.argv[2]))    host = sys.argv[3]    if len(sys.argv) > 4:        port = eval(sys.argv[4])    else:        port = MY_PORT    testdata = 'x' * (BUFSIZE-1) + '\n'    t1 = time.time()    s = socket(AF_INET, SOCK_STREAM)    t2 = time.time()    s.connect((host, port))    t3 = time.time()    i = 0    while i < count:        i = i+1        s.send(testdata)    s.shutdown(1) # Send EOF    t4 = time.time()    data = s.recv(BUFSIZE)    t5 = time.time()    print data    print 'Raw timers:', t1, t2, t3, t4, t5    print 'Intervals:', t2-t1, t3-t2, t4-t3, t5-t4    print 'Total:', t5-t1    print 'Throughput:', round((BUFSIZE*count*0.001) / (t5-t1), 3),    print 'K/sec.'  main()