diff --git a/__pycache__/sync.cpython-313.pyc b/__pycache__/sync.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..39ab3f1aff8c2617a38fe17a399b3ae4772a1572 Binary files /dev/null and b/__pycache__/sync.cpython-313.pyc differ diff --git a/kclient.py b/kclient.py index 1cbca2708883e1dc3b69ee202b31cb4cb0e225e1..9e537d689b24dbc53eee51e61547719d56d09888 100644 --- a/kclient.py +++ b/kclient.py @@ -4,36 +4,52 @@ import threading broadcast_ip = '255.255.255.255'#ip ggfs ändern broadcast_port = 55555 +#local host information +MY_HOST = socket.gethostname() +#socket.gethostbyname(socket.gethostname()) #getip +MY_IP = socket.gethostbyname(MY_HOST) +#print(f"host:{MY_HOST} and ip: {MY_IP}") + # Erstelle den Client-Socket für Broadcast client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) client_socket.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) client_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) client_socket.bind(('', broadcast_port)) # Lausche auf Broadcast-Port -nickname = input("Enter your nickname: ") +#nickname = input("Enter your nickname: ") def receive(): """Empfängt Nachrichten vom Server und anderen Clients.""" while True: try: - data, _ = client_socket.recvfrom(4096) + data, address = client_socket.recvfrom(4096) decoded_message = data.decode() # Ignoriere Nachrichten mit Server-Kennung if decoded_message.startswith("["): continue + #ignores broadcast messages with own ip + if address[0]==MY_IP: + continue print(decoded_message) + except socket.error as e: print(f"An error occurred: {e}") break def write(): """Ermöglicht dem Benutzer, Nachrichten zu schreiben und zu senden.""" + nickname = input("Enter your nickname: ") + just_nickname= f"{nickname} entered the chat".encode() + client_socket.sendto(just_nickname, (broadcast_ip, broadcast_port)) + while True: message = input("") + if message.strip(): - full_message = f"{nickname}: {message}".encode() + full_message = f"{nickname}: {message}".encode()#entered the chat? + client_socket.sendto(full_message, (broadcast_ip, broadcast_port)) # Starte den receive-Thread diff --git a/kserver.py b/kserver.py index 3f597a6e70376f750ce44d7c30d530b4c8dccf5a..b3b5dee7597cb1f3e846c018b85fe9a4f44d26b1 100644 --- a/kserver.py +++ b/kserver.py @@ -17,7 +17,7 @@ server_socket.bind(('', broadcast_port)) print(f"Server is running with ID {server_id} and broadcasting on port {broadcast_port}...") def broadcast(message): - """Sendet eine Nachricht an alle im Netzwerk mit Server-ID.""" + """Sendet eine Nachricht an alle im Netzwerk mit Server-ID an Server.""" full_message = f"[{server_id}] {message}".encode() server_socket.sendto(full_message, (broadcast_ip, broadcast_port)) @@ -32,10 +32,15 @@ def receive(): if decoded_message.startswith(f"[{server_id}]"): continue # Ignoriere die Nachricht, wenn sie vom Server selbst stammt + if decoded_message.__contains__("entered"): + print(f"{client_address} entered the chat.") + print(f"Received from {client_address}: {decoded_message}") - # Broadcast die Nachricht an alle Clients + # Broadcast die Nachricht an alle Clients außer dem Sender + #if server_id!=client_address: broadcast(decoded_message) + except socket.error as e: print(f"An error occurred: {e}") diff --git a/sync.py b/sync.py new file mode 100644 index 0000000000000000000000000000000000000000..c3b6d25a109362ba0590f80b0010af6bfab8228b --- /dev/null +++ b/sync.py @@ -0,0 +1,15 @@ +import leaderServer + + +def check_arrays(received_server_network, received_leader): + + #aktuellen zustand des servers prüfen: + if received_server_network != leaderServer.server_network: + print("Unterschiede im Server-Netzwerk gefunden. Aktualisiere das Netzwerk...") + leaderServer.server_network = received_server_network # Update das Netzwerk + print(f"new network: {received_server_network} or {leaderServer.server_network}") + + if received_leader != leaderServer.leader: + print("Unterschiede im Leader gefunden. Aktualisiere den Leader...") + leaderServer.leader = received_leader # Update den Leader + print(f"new network: {received_leader} or {leaderServer.leader}") \ No newline at end of file