Skip to content
Snippets Groups Projects
Select Git revision
  • cd7398c7fe5ee067dc046d6eebb964bc7963780d
  • main default protected
  • feat/final
  • feature/Michelle
  • feat/010125
  • Luca
  • feat/knew
  • feat/try
  • feat/katha2
  • feature/katharina
10 results

2024-12-22_Client_V4.py

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    2024-12-22_Client_V4.py 2.92 KiB
    import socket
    import threading
    import time
    import uuid
    
    broadcast_ip = '255.255.255.255'#change ip??? #hard coded?
    broadcast_port = 55555
    broadcast_port2 = 33333
    
    #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}")
    
    # create client-socket for 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))  # listen on broadcast #socket is bind to ALL available IP addresses
    
    listener_ready = threading.Event()
    
    #listen for server?
    def listen_server():
        client_socket2 = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        client_socket2.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
        client_socket2.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        client_socket2.bind(('', broadcast_port2))  # listen on broadcast #socket is bind to ALL available IP addresses
        """receives messages from server."""
        #listener_ready.set() #makes sure that listener is ready
        while True:
            try:
                data, address = client_socket2.recvfrom(4096)
                decoded_message = data.decode()
                #print(f"Received {data.decode()} from {address}") #debug
                #ignores broadcast messages with own ip #################please enable it after testing!!!!!!!!!!!!!!!!!!!S
                
                #does not work
                if address[0]==MY_IP:
                 continue
                
                #print("this decoded msg", decoded_message) #debug
    
            except socket.error as e:
                print(f"An error occurred: {e}")
                break
    
    
    def sender():
        """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))
        client_socket.sendto(just_nickname, (broadcast_ip, broadcast_port))
        #print("is it leader adresse here", leader_address)
        while True:
            message_id = str(uuid.uuid4())
            #allows the client to send any message
            message = input("")
            #print("send message to", broadcast_port)
            #checks for whitemarks
            if message.strip():
                
                full_message = f"{message_id}: {nickname}: {message}".encode()
                client_socket.sendto(full_message, (broadcast_ip, broadcast_port))
                #print("message sended to", broadcast_port)
    
    ###############main#################################
    if __name__ == "__main__":
        # Start listener thread
        listen_thread = threading.Thread(target=listen_server)
        listen_thread.daemon = True
        listen_thread.start()
        #listener_ready.wait()
    
        sender_thread = threading.Thread(target=sender)
        sender_thread.start()