DC Exp 5
DC Exp 5
Server.py:
import socket
import pickle
class Node:
def _init_(self, id):
self.id = id
self.elected_leader = None
self.nodes = []
def bully_election(nodes):
n = len(nodes)
# Step 1: If a node detects that the leader is not responding, it starts an election
for i in range(n):
if nodes[i].elected_leader is None:
for j in range(i + 1, n):
nodes[i].send_election_message(nodes[j])
# Step 3: If a node receives an OK message, it cancels its election and sends a message to
the higher ID node
for i in range(n):
if nodes[i].elected_leader is None:
for j in range(i + 1, n):
if nodes[i].id < nodes[j].id:
print("Node", nodes[i].id, "cancels its election.")
break
else:
nodes[i].elected_leader = nodes[i]
def start_server():
# Create socket to listen for incoming connections
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(("192.168.1.244", 5555))
server_socket.listen(5)
print("Server is listening...")
while True:
client_socket, address = server_socket.accept()
print(f"Connection from {address} has been established.")
bully_election(nodes)
break
if _name_ == "_main_":
start_server()
Client.py:
import socket
import pickle
def send_id(id):
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(("192.168.1.244", 5555))
client_socket.send(pickle.dumps(id))
client_socket.close()
if __name__ == "__main__":
node_id = int(input("Enter Node ID: "))
send_id(node_id)
Output: