diff --git a/clients.py b/clients.py
deleted file mode 100644
index 5796a2cd0fc7df9cccd3d3d1135d577c93d49c1b..0000000000000000000000000000000000000000
--- a/clients.py
+++ /dev/null
@@ -1,32 +0,0 @@
-import socket
-import threading
-
-nickname=input("Choose a mickname: ")
-
-client=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
-client.connect(('127.0.0.1', 55555))
-
-def receive():
-    while True:
-        try:
-            message=client.recv(1024).decode()
-            if message=='NICK':
-                client.send(nickname.encode())
-            else:
-                print(message)
-        except:
-            print("An error occured")
-            client.close()
-            break
-
-def write():
-    while True:
-        message=f'{nickname}: {input("")}'#as soon as user clicks enter and sends new input, we're asking for the next one, so either close client or send new messages
-        client.send(message.encode())
-
-#run receive and write threat
-receive_thread=threading.Thread(target=receive)
-receive_thread.start()
-
-write_thread=threading.Thread(target=write)
-write_thread.start()
\ No newline at end of file
diff --git a/kclient.py b/kclient.py
new file mode 100644
index 0000000000000000000000000000000000000000..adbffd4374acacac4e58feebdb2c51e6068aeda1
--- /dev/null
+++ b/kclient.py
@@ -0,0 +1,45 @@
+import socket
+import threading
+
+broadcast_ip = '255.255.255.255'
+broadcast_port = 55555
+
+# 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: ")
+
+def receive():
+    """Empfängt Nachrichten vom Server und anderen Clients."""
+    while True:
+        try:
+            data, _ = client_socket.recvfrom(4096)
+            decoded_message = data.decode()
+
+            # Ignoriere Nachrichten mit Server-Kennung
+            if decoded_message.startswith("["):
+                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."""
+    while True:
+        message = input("")
+        if message.strip():
+            full_message = f"{nickname}: {message}".encode()
+            client_socket.sendto(full_message, (broadcast_ip, broadcast_port))
+
+# Starte den receive-Thread
+receive_thread = threading.Thread(target=receive)
+receive_thread.daemon = True
+receive_thread.start()
+
+# Starte die write-Funktion im Hauptthread
+write()
diff --git a/kserver.py b/kserver.py
new file mode 100644
index 0000000000000000000000000000000000000000..3f597a6e70376f750ce44d7c30d530b4c8dccf5a
--- /dev/null
+++ b/kserver.py
@@ -0,0 +1,48 @@
+import socket
+import threading
+import uuid
+
+broadcast_ip = '255.255.255.255'
+broadcast_port = 55555
+
+# Erstelle eine eindeutige Server-ID
+server_id = str(uuid.uuid4())
+
+# Erstelle den Server-Socket für Broadcast
+server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
+server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
+server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
+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."""
+    full_message = f"[{server_id}] {message}".encode()
+    server_socket.sendto(full_message, (broadcast_ip, broadcast_port))
+
+def receive():
+    """Empfängt Nachrichten von Clients und broadcastet sie weiter."""
+    while True:
+        try:
+            message, client_address = server_socket.recvfrom(4096)
+            decoded_message = message.decode()
+
+            # Prüfe, ob die Nachricht vom Server selbst stammt
+            if decoded_message.startswith(f"[{server_id}]"):
+                continue  # Ignoriere die Nachricht, wenn sie vom Server selbst stammt
+
+            print(f"Received from {client_address}: {decoded_message}")
+
+            # Broadcast die Nachricht an alle Clients
+            broadcast(decoded_message)
+
+        except socket.error as e:
+            print(f"An error occurred: {e}")
+            break
+        except KeyboardInterrupt:
+            print("\nServer wird beendet...")
+            break
+
+if __name__ == "__main__":
+    receive()
diff --git a/server.py b/server.py
deleted file mode 100644
index 3023e87c2dfe8449058fbfb1ec49e00440572fc0..0000000000000000000000000000000000000000
--- a/server.py
+++ /dev/null
@@ -1,52 +0,0 @@
-import socket
-import threading
-
-host='127.0.0.1'
-port=55555
-
-print(f'Server ist listening on {host} and port {port}')
-
-server=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
-server.bind((host, port))
-server.listen()
-
-clients=[]
-nicknames=[]
-
-def broadcast(message):
-    for client in clients:
-        client.send(message)
-
-def handle(client):
-    while True:
-        try:
-            message=client.recv(1024)
-            broadcast(message)
-        except:
-            index=clients.index(client)
-            clients.remove(client)
-            client.close()
-            nickname=nicknames[index]
-            broadcast(f'{nickname} left the chat'.encode())
-            nicknames.remove(nickname)
-            break
-
-def receive():
-
-    while True:
-        client, address=server.accept() #accept clients all the time
-        print(f"Connected with {str(address)}")
-
-        client.send('NICK'.encode()) #send to client keyword NICK
-        nickname=client.recv(1024).decode() #receive nickname from client
-        nicknames.append(nickname) #append nickname to list
-        clients.append(client) #append client to list
-
-        print(f'Nickname of client ist {nickname}')
-        broadcast(f'{nickname} joined the chat'.encode()) #broadcast to all clients connected to server
-        client.send("Connected to the server".encode()) #send to particular client that connection was successfull 
-
-        thread=threading.Thread(target=handle, args=(client,)) #start a thread, which handles the connection with this particular client
-        thread.start()
-
-receive()
\ No newline at end of file