import socket
import datetime
PORT = 3001

ip_addr = '0.0.0.0'

while True:
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
        s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        s.bind((ip_addr, PORT))
        s.listen()
        print(f"Server listening on {ip_addr}:{PORT}")
        conn, addr = s.accept()
        with conn:
            print(f"{datetime.datetime.now()}: Connected by {addr}")
            while True:
                did_receive_data = False
                while not did_receive_data:
                    data = conn.recv(1024)  # Receive up to 1024 bytes
                    if not data:
                        continue
                    print(f"{datetime.datetime.now()}: Received from client: {data.decode('utf-8')}")
                    response = f"Server received: {data.decode('utf-8')}"
                    conn.sendall(response.encode('utf-8'))
                    did_receive_data = True
        conn.close()
        s.close()
