diff --git a/server.py b/server.py
index b5554fde85896b3e3fe16e39611dd6a1d0fd42ff..e7be751dd9182f513058d6c5b03dd0829a952712 100644
--- a/server.py
+++ b/server.py
@@ -2,18 +2,19 @@ import multiprocessing
 import socket
 import threading
 import json
+import time
 
 client_broadcast_listener_port = 49153
 server_broadcast_listener_port = 49154
 
+server_heartbeat_tcp_listener_port = 49155
+
 client_receive_chat_tcp_port = 50001
 client_forward_message_multicast_port = 51000
 
 multicast_group_ip = '224.0.1.1'
 
 
-
-
 class Server(multiprocessing.Process):
     #server_address = '127.0.0.1'
     host = socket.gethostname()
@@ -39,13 +40,69 @@ class Server(multiprocessing.Process):
 
             server_listener_thread = threading.Thread(target=self.listen_for_servers)
             server_listener_thread.start()
+            
+            heartbeat_send_thread = threading.Thread(target=self.send_heartbeat)
+            heartbeat_send_thread.start()
 
         else:
             cache_update_listener_thread = threading.Thread(target=self.listen_for_cache_update)
             client_message_listener_thread = threading.Thread(target=self.listen_for_client_messages)
+            heartbeat_receive_thread = threading.Thread(target=self.listen_for_heartbeats)
 
             cache_update_listener_thread.start()
             client_message_listener_thread.start()
+            heartbeat_receive_thread.start()
+            
+    def send_heartbeat(self):
+        while True:
+            time.sleep(10)
+            for server_id, server_port in self.local_servers_cache.items():
+                if server_id != self.server_id:
+                    acknowledgment_received = self.send_heartbeat_to_server(self.server_address, server_heartbeat_tcp_listener_port)
+                    #acknowledgment_received = "YES"
+                    if acknowledgment_received:
+                        print(f"Heartbeat acknowledgment received from {server_id}")
+                    else:
+                        print(f"No acknowledgment received from {server_id}. Server may be down.")
+
+    def send_heartbeat_to_server(self, server_address, server_port):
+        acknowledgment_received = False
+        try:
+            with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
+                s.settimeout(2)  # Timeout for the connection
+                # Combine server address and port into a tuple
+                server_address_with_port = (server_address, server_port)
+                print("server_address_with_port", server_address_with_port)
+                s.connect(server_address_with_port)
+                s.sendall(b'HEARTBEAT')
+                acknowledgment = s.recv(1024)
+                if acknowledgment == b'ACK':
+                    acknowledgment_received = True
+        except socket.error:
+            pass  # Error handling for connection errors or timeout
+        return acknowledgment_received
+
+    
+    def listen_for_heartbeats(self):
+        while True:
+            try:
+                with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
+                    s.bind((self.server_address, server_heartbeat_tcp_listener_port))  # Bind to any available port
+                    actual_port = s.getsockname()[1]
+                    print(f"Heartbeat Listener Started on port {actual_port}")
+                    s.listen()
+                    conn, addr = s.accept()
+                    with conn:
+                        print("Hallo")
+                        data = conn.recv(1024)
+                        if data == b'HEARTBEAT':
+                            # Hier Code zum Verarbeiten des Heartbeats
+                            # (z.B., Aktualisieren des Zeitstempels für den letzten Heartbeat)
+                            print(f"Heartbeat received from {addr}")
+                            # Hier Code zum Senden des Acknowledgment
+                            conn.sendall(b'ACK')
+            except socket.error as e:
+                print(f"Error: {e}")
     
     # find highest server ID in cache
     def get_last_server_id(self):      
@@ -56,7 +113,6 @@ class Server(multiprocessing.Process):
             # ascii value before A
             return 64
 
-
     def listen_for_servers(self):
 
         BROADCAST_PORT = 49154