-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest.py
More file actions
104 lines (74 loc) · 2.97 KB
/
test.py
File metadata and controls
104 lines (74 loc) · 2.97 KB
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
from socket import socket
from socket import AF_INET
from socket import SOCK_DGRAM
from threading import Thread
import random
import string
import time
def send(IP, port, message):
sock_udp = socket(AF_INET, SOCK_DGRAM)
sock_udp.sendto(message, (IP, port))
sock_udp.close()
def send_and_receive(IP, port, message):
sock_udp = socket(AF_INET, SOCK_DGRAM)
sock_udp.sendto(message, (IP, port))
data = sock_udp.recv(4096)
sock_udp.close()
if data.decode() != 'FINISHED':
print ('Neighbor In IP: ', IP, ' and port: ', port, 'failed')
def print_routing_table(network_size, UDP_port_start):
message = 'PRINT-ROUTING-TABLE'.encode()
for i in range(network_size,0,-1):
Thread(target=send, args=('127.0.0.1', UDP_port_start + i - 1, message)).start()
def shut_down(network_size, UDP_port_start):
message = 'SHUT-DOWN'.encode()
for i in range(0, network_size):
Thread(target=send, args=('127.0.0.1', UDP_port_start + i, message)).start()
def update_routing_table(network_size, UDP_port_start):
threads = []
message = 'UPDATE-ROUTING-TABLE'.encode()
for i in range(0, network_size):
threads.append(Thread(target=send_and_receive, args=('127.0.0.1', UDP_port_start + i, message)))
for thread in threads:
thread.start()
for thread in threads:
thread.join()
def route(network_size, UDP_port_start):
destination = (random.randint(1, 1000) % network_size) + 1
start = (random.randint(1, 1000) % network_size) + 1
message_len = random.randint(1, 100)
message = ''.join(random.choice(string.ascii_lowercase + string.digits) for _ in range(message_len))
route_message = ('ROUTE' + ';' + str(destination) + ';' + message).encode()
sock_udp = socket(AF_INET, SOCK_DGRAM)
sock_udp.sendto(route_message, ('127.0.0.1', UDP_port_start + start - 1))
sock_udp.close()
def test(network_size, UDP_port_start):
random.seed(24563)
update_routing_table(network_size, UDP_port_start)
time.sleep(0.5)
route(network_size, UDP_port_start)
time.sleep(0.5)
route(network_size, UDP_port_start)
time.sleep(0.5)
print_routing_table(network_size, UDP_port_start)
time.sleep(0.5)
update_routing_table(network_size, UDP_port_start)
time.sleep(0.5)
print_routing_table(network_size, UDP_port_start)
time.sleep(0.5)
update_routing_table(network_size, UDP_port_start)
time.sleep(0.5)
update_routing_table(network_size, UDP_port_start)
time.sleep(0.5)
print_routing_table(network_size, UDP_port_start)
time.sleep(0.5)
route(network_size, UDP_port_start)
time.sleep(0.5)
shut_down(network_size, UDP_port_start)
time.sleep(1)
def main():
network_size = int(input('Enter Network Size\n'))
UDP_port_start = int(input('Enter UDP port\n'))
test(network_size, UDP_port_start)
if __name__ == '__main__':
main()