import socket
import struct
import time
import pickle  # Import pickle pro serializaci dat
 
SERVER_ADR = ('localhost', 12345)
 
def start_client(message):
    # Vytvoření socketu pro připojení k serveru
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client_socket.connect(SERVER_ADR)
 
    try:
        # Serializace zprávy pomocí pickle
        serialized_message = pickle.dumps(message)
 
        # Odeslání délky zprávy (v tomto případě je to délka ve formátu unsigned int)
        message_length = len(serialized_message)
        client_socket.sendall(struct.pack("I", message_length))  # Odeslání délky jako unsigned int (4 byty)
 
        # Odeslání samotné zprávy
        client_socket.sendall(serialized_message)
 
        # Přijmeme odpověď od serveru
        response_length = struct.unpack("I", client_socket.recv(4))[0]  # Nejprve přijmeme délku odpovědi
        response = pickle.loads(client_socket.recv(response_length))  # Poté odpověď samotnou
        print(f"Server odpověděl: {response}")
 
    except Exception as e:
        print(f"Chyba při komunikaci: {e}")
    finally:
        client_socket.close()
 
if __name__ == "__main__":
    # Zprávy mohou být nyní jakýkoliv Python objekt
    start_client(("Petr", "Novák", 45))  # Posíláme n-tici
    start_client(("Jana", "Nováková",33))  # Posíláme další n-tici
    time.sleep(2)
    start_client("!STOP")  # Posíláme příkaz k zastavení serveru