diff --git a/UDP-client-server.py b/UDP-client-server.py index 5a334655bcbe36d4bdf7ec80dcc44ad5e0c25909..6c9e392bc7df58028e75621f12550dbc519899ca 100644 --- a/UDP-client-server.py +++ b/UDP-client-server.py @@ -5,26 +5,27 @@ from threading import Thread #DEFINE INPUTS HERE #CLIENT - SENDER -UDP_DEST_IP='::1' #IP ADDRESS TO SEND DATAGRAMS TO (v4 or v6) -UDP_DEST_PORT=15005 #IP PORT TO SEND DATAGRAMS TO -PACKET_SIZE = 200 #DATAGRAM SIZE IN BYTES -NR_OF_PACKETS=10 #TOTAL NR. OF PACKETS TO SEND -PACKETS_PER_SEC=100 #PACKETS PER SECOND - -#CLIENT - RECEIVER -UDP_RECEIVE_IP = '::1' #IP ADDRESS TO LISTEN FOR INCOMMING PACKETS (v4 or v6) -UDP_RECEIVE_PORT=55555 #IP PORT TO LISTEN FOR INCOMMING PACKETS +UDP_DEST_IP = '::1' # IP ADDRESS TO SEND DATAGRAMS TO (v4 or v6) +UDP_DEST_PORT = 15005 # IP PORT TO SEND DATAGRAMS TO +PACKET_SIZE = 200 # DATAGRAM SIZE IN BYTES +NR_OF_PACKETS = 10 # TOTAL NR. OF PACKETS TO SEND +PACKETS_PER_SEC = 100 # PACKETS PER SECOND + +# CLIENT - RECEIVER +UDP_RECEIVE_IP = '::1' # LISTENING IP ADDRESS (v4 or v6) +UDP_RECEIVE_PORT = 55555 # IP PORT TO LISTEN FOR INCOMING PACKETS BUFFER = 4096 + #CLIENT-RECEIVER PART def udp_client_receive(UDP_RECEIVE_IP, UDP_RECEIVE_PORT): ADDR = (UDP_RECEIVE_IP, UDP_RECEIVE_PORT) #MAKE A DUMB IP VERSION CHECK if ':' in UDP_RECEIVE_IP: - rcv_sock = socket.socket( socket.AF_INET6, socket.SOCK_DGRAM ) + rcv_sock = socket.socket(socket.AF_INET6, socket.SOCK_DGRAM) else: - rcv_sock = socket.socket( socket.AF_INET, socket.SOCK_DGRAM ) + rcv_sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) global packet_count_rcvd global cumulative_delay @@ -33,7 +34,7 @@ def udp_client_receive(UDP_RECEIVE_IP, UDP_RECEIVE_PORT): min_delay = 100. max_delay = 0. packet_count_rcvd = 0 - cumulative_delay=0. + cumulative_delay = 0. try: rcv_sock.bind(ADDR) @@ -43,15 +44,21 @@ def udp_client_receive(UDP_RECEIVE_IP, UDP_RECEIVE_PORT): #FIRE UP THE LISTENER ENGINES while True: - data, addr = rcv_sock.recvfrom( BUFFER ) + data, addr = rcv_sock.recvfrom(BUFFER) splitdata = data.split(',') timecount = splitdata[0].strip("('") rt_delay = (time.time() - float(timecount)) packet_number = str(splitdata[1].strip("' '")) packet_number = packet_number.lstrip('0') #WRITE TO FILE AND DO PACKET COUNT - outfile = open("udp_twoway_results.csv", "a").write(str(time.ctime()+','+'received , '+ packet_number+' , '+str(rt_delay)+'\n')) - print (time.ctime()+','+'received , '+ packet_number+' , '+str(rt_delay)) + #outfile = open("udp_twoway_results.csv", "a").\ + open("udp_twoway_results.csv", "a").\ + write(str(time.ctime() + ',' + 'received , ' + + packet_number + ' , ' + str(rt_delay) + '\n')) + + print (time.ctime() + ',' + 'received , ' + + packet_number + ' , ' + str(rt_delay)) + # Store minimum and maximum delay if rt_delay > max_delay: max_delay = rt_delay @@ -59,14 +66,16 @@ def udp_client_receive(UDP_RECEIVE_IP, UDP_RECEIVE_PORT): min_delay = rt_delay print (max_delay, min_delay) - packet_count_rcvd=packet_count_rcvd+1 - cumulative_delay=cumulative_delay+rt_delay + packet_count_rcvd = packet_count_rcvd + 1 + cumulative_delay = cumulative_delay + rt_delay + #CLIENT SERVER SIDE -def udp_client_send(UDP_DEST_IP, UDP_DEST_PORT, PACKET_SIZE, NR_OF_PACKETS, PACKETS_PER_SEC): +def udp_client_send(UDP_DEST_IP, UDP_DEST_PORT, + PACKET_SIZE, NR_OF_PACKETS, PACKETS_PER_SEC): - inter_departure_time = 1./PACKETS_PER_SEC - packet_count_snd=0 + inter_departure_time = 1. / PACKETS_PER_SEC + packet_count_snd = 0 print "UDP Client Started" print "UDP target IP:", UDP_DEST_IP @@ -75,33 +84,35 @@ def udp_client_send(UDP_DEST_IP, UDP_DEST_PORT, PACKET_SIZE, NR_OF_PACKETS, P #IF IPv6 if ':' in UDP_DEST_IP: - if PACKET_SIZE > 97: #BUILD DATAGRAM OF DESIRED SIZE - padding='' - for j in range (98, PACKET_SIZE): - padding = padding+str(1) - for i in range (1,NR_OF_PACKETS+1): #SEND SPECIFIED NUMBER OF PACKETS - time.sleep(inter_departure_time ) - snd_sock6 = socket.socket( socket.AF_INET6,socket.SOCK_DGRAM ) - snd_sock6.sendto(str(("%.5f" % time.time(),str('%08d' % i), padding)), (UDP_DEST_IP, UDP_DEST_PORT) ) - packet_count_snd = packet_count_snd+1 + if PACKET_SIZE > 97: # BUILD DATAGRAM OF DESIRED SIZE + padding = '' + for j in range(98, PACKET_SIZE): + padding = padding + str(1) + for i in range(1, NR_OF_PACKETS + 1): # SEND SPECIFIED NR OF PKTS + time.sleep(inter_departure_time) + snd_sock6 = socket.socket(socket.AF_INET6, socket.SOCK_DGRAM) + snd_sock6.sendto(str(("%.5f" % time.time(), str('%08d' % i), + padding)), (UDP_DEST_IP, UDP_DEST_PORT)) + packet_count_snd = packet_count_snd + 1 #IF NOT IPv6 else: if PACKET_SIZE > 77: - padding='' - for j in range (78, PACKET_SIZE): - padding = padding+str(1) - for i in range (1,NR_OF_PACKETS+1): + padding = '' + for j in range(78, PACKET_SIZE): + padding = padding + str(1) + for i in range(1, NR_OF_PACKETS + 1): time.sleep(inter_departure_time) - snd_sock = socket.socket( socket.AF_INET,socket.SOCK_DGRAM ) - snd_sock.sendto(str(("%.5f" % time.time(),str('%08d' % i), padding)), (UDP_DEST_IP, UDP_DEST_PORT) ) - packet_count_snd = packet_count_snd+1 + snd_sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + snd_sock.sendto(str(("%.5f" % time.time(), str('%08d' % i), + padding)), (UDP_DEST_IP, UDP_DEST_PORT)) + packet_count_snd = packet_count_snd + 1 #WAIT 5SEC FOR ALL PACKETS TO ARRIVE time.sleep(5) # Perhaps create a custom object where we store the statistics? # Or from here save it directly into the database? - PLR = 100 - ((packet_count_rcvd*100.)/packet_count_snd) + PLR = 100 - ((packet_count_rcvd * 100.) / packet_count_snd) print '\n', packet_count_snd, 'packets sent' print packet_count_rcvd, 'packets received' @@ -110,12 +121,16 @@ def udp_client_send(UDP_DEST_IP, UDP_DEST_PORT, PACKET_SIZE, NR_OF_PACKETS, P if packet_count_rcvd == 0: pass else: - print 'average rtt = ', cumulative_delay/packet_count_rcvd + print 'average rtt = ', cumulative_delay / packet_count_rcvd #START THE THREADS FOR SENDER AND RECEIVER if __name__ == "__main__": - receiver_thread = Thread(target=udp_client_receive, args=(UDP_RECEIVE_IP, UDP_RECEIVE_PORT)) - receiver_thread.daemon=True + receiver_thread = Thread(target=udp_client_receive, + args=(UDP_RECEIVE_IP, UDP_RECEIVE_PORT)) + receiver_thread.daemon = True receiver_thread.start() time.sleep(1) - sender_thread = Thread(target=udp_client_send, args=(UDP_DEST_IP, UDP_DEST_PORT, PACKET_SIZE, NR_OF_PACKETS, PACKETS_PER_SEC)).start() + sender_thread = Thread(target=udp_client_send, + args=(UDP_DEST_IP, UDP_DEST_PORT, + PACKET_SIZE, NR_OF_PACKETS, + PACKETS_PER_SEC)).start()