diff --git a/client.py b/client.py index 13a5038a28aaa0042f3577c37e277667d78dab87..9d270931784f7b204451bdbecc138acb8f1b2b00 100644 --- a/client.py +++ b/client.py @@ -80,15 +80,29 @@ class Client(multiprocessing.Process): client_socket.sendall(bytes(message, 'utf-8')) - data = client_socket.recv(1024) - print(f"Received response from server: {data.decode('utf-8')}") + #data = client_socket.recv(1024) + #print(f"Received response from server: {data.decode('utf-8')}") client_socket.close() def receive_messages(self): - print("Listening for groupchat multicast messages") - client_receive_message_multicast_port + PORT = 51000 + + + client_receive_message_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + client_receive_message_socket.bind((self.client_address, PORT)) + client_receive_message_socket.listen() + + print("Listening for groupchat messages") + + while True: + connection, addr = client_receive_message_socket.accept() + #print(addr) + #print(f"Connection established with {addr}") + + message = connection.recv(1024) + print(f"GC message: {message.decode('utf-8')}") #multicast_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP) #multicast_socket.bind(('0.0.0.0', client_receive_message_multicast_port)) diff --git a/server.py b/server.py index 98424e132f08120991f02fbeefc38b7af0af5e64..2cf7d40d8c1dea0d3c99e8f89294b40d4ffb9214 100644 --- a/server.py +++ b/server.py @@ -493,13 +493,12 @@ class Server(multiprocessing.Process): message = connection.recv(1024) print(f"Received message from client: {message.decode('utf-8')}") - response = "Hello, client! I received your message." - connection.sendall(bytes(response, 'utf-8')) + #response = "Hello, client! I received your message." + #connection.sendall(bytes(response, 'utf-8')) connection.close() if message: self.distribute_chat_message(message, addr) - #print(addr[0]) def distribute_chat_message(self, message, addr): group = self.find_group_of_client(addr) @@ -508,27 +507,25 @@ class Server(multiprocessing.Process): for key in self.local_clients_cache: if group in key: - receiver_list.append(self.local_clients_cache[key][0]) - print("Receiver list", receiver_list) + if addr[0] != self.local_clients_cache[key][0]: + receiver_list.append(self.local_clients_cache[key][0]) + print("Receiver list", receiver_list) - distribute_chat_thread = threading.Thread(target=self.multicast_chat_message(message, receiver_list)) + distribute_chat_thread = threading.Thread(target=self.send_chat_message_to_clients(message, receiver_list)) distribute_chat_thread.start() + def send_chat_message_to_clients(self, message, receiver_list): - #print(group) - #print(message.decode('utf-8')) + PORT = 51000 - def multicast_chat_message(self, message, receiver_list): for client in receiver_list: - multicast_address = (client, client_forward_message_multicast_port) - - multicast_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP) - multicast_socket.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 2) - - multicast_socket.sendto(message, multicast_address) - print("multicast message sent") - - multicast_socket.close() + try: + server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + server_socket.connect((client, PORT)) + server_socket.sendall(message) + server_socket.close() + except (ConnectionRefusedError, TimeoutError): + print(f'Unable to send to {client}') def start_leader_election(self): #Reset last heartbeat timestamp