Skip to content
Snippets Groups Projects
Commit e092cdee authored by Katharina's avatar Katharina
Browse files

add threads and comments

parent b3bc1394
No related merge requests found
import socket
import threading
broadcast_ip = '255.255.255.255'#ip ggfs ändern
broadcast_ip = '255.255.255.255'#change ip??? #hard coded?
broadcast_port = 55555
#local host information
......@@ -10,16 +10,16 @@ MY_HOST = socket.gethostname()
MY_IP = socket.gethostbyname(MY_HOST)
#print(f"host:{MY_HOST} and ip: {MY_IP}")
# Erstelle den Client-Socket für Broadcast
# 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)) # Lausche auf Broadcast-Port
client_socket.bind(('', broadcast_port)) # listen on broadcast-port
#nickname = input("Enter your nickname: ")
def receive():
"""Empfängt Nachrichten vom Server und anderen Clients."""
def listen():
"""receives messages from server and clients."""
while True:
try:
data, address = client_socket.recvfrom(4096)
......@@ -38,24 +38,32 @@ def receive():
print(f"An error occurred: {e}")
break
def write():
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))
while True:
#allows the client to send any message
message = input("")
#checks for whitemarks
if message.strip():
full_message = f"{nickname}: {message}".encode()#entered the chat?
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()
# starts listen-thread
listen_thread = threading.Thread(target=listen)
#Daemon Thread does not block the main thread from exiting and continues to run in the background
listen_thread.daemon = True
listen_thread.start()
#print(listen_thread.is_alive())
# Starte die write-Funktion im Hauptthread
write()
# starts sender-function in main thread
#sender()
sender_thread= threading.Thread(target=sender)
#sender_thread.daemon = True
sender_thread.start()
#print(sender_thread.is_alive())
......@@ -5,10 +5,10 @@ import uuid
broadcast_ip = '255.255.255.255'
broadcast_port = 55555
# Erstelle eine eindeutige Server-ID
# create unique server-ID
server_id = str(uuid.uuid4())
# Erstelle den Server-Socket für Broadcast
# create server-socket for 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)
......@@ -16,38 +16,47 @@ server_socket.bind(('', broadcast_port))
print(f"Server is running with ID {server_id} and broadcasting on port {broadcast_port}...")
#broadcast function
def broadcast(message):
"""Sendet eine Nachricht an alle im Netzwerk mit Server-ID an Server."""
"""sends messages to all server-IDs in the network"""
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."""
#listener function
def listen():
"""receives messages from clients and broadcast them."""
while True:
try:
message, client_address = server_socket.recvfrom(4096)
decoded_message = message.decode()
# Prüfe, ob die Nachricht vom Server selbst stammt
# checks wheter the message comes from the server itself
if decoded_message.startswith(f"[{server_id}]"):
continue # Ignoriere die Nachricht, wenn sie vom Server selbst stammt
continue # if...ignores it
#checks if the message containts the string "entered"
if decoded_message.__contains__("entered"):
print(f"{client_address} entered the chat.")
print(f"Received from {client_address}: {decoded_message}")
# Broadcast die Nachricht an alle Clients außer dem Sender
#if server_id!=client_address:
broadcast(decoded_message)
#exceptions
except socket.error as e:
print(f"An error occurred: {e}")
break
#does not work
except KeyboardInterrupt:
print("\nServer wird beendet...")
break
if __name__ == "__main__":
receive()
#main thread
listen_thread= threading.Thread(target=listen)
#listen_thread.daemon = True
listen_thread.start()
#print(listen_thread.is_alive())
#listen()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment