From b37134e2ff16a754f553ad782783dde97ade6975 Mon Sep 17 00:00:00 2001 From: Alexander Schulz <alexander.schulz@student.reutlingen-university.de> Date: Sat, 30 Dec 2023 21:48:33 +0100 Subject: [PATCH] bugfix client numeration --- client.py | 30 ++++++++++++++++++++++++------ server.py | 45 ++++++++++++++++++++++++++++++++++++--------- 2 files changed, 60 insertions(+), 15 deletions(-) diff --git a/client.py b/client.py index 0eb17b3..6bf73ed 100644 --- a/client.py +++ b/client.py @@ -1,6 +1,7 @@ import multiprocessing import socket import threading +import re class Client(multiprocessing.Process): @@ -40,9 +41,17 @@ class Client(multiprocessing.Process): broadcast_socket.sendto(MSG, ('<broadcast>', PORT)) data, server = broadcast_socket.recvfrom(1024) - print('Received message from server: ', data.decode('utf-8')) - self.registered_server = server + print('Received message from server: ', data.decode('utf-8')) + + # search for ip_address & port in message from server + match = re.search(r'\((\d+\.\d+\.\d+\.\d+):(\d+)\)', data.decode('utf-8')) + ip_address = match.group(1) + port = match.group(2) + self.registered_server = [ip_address, port] + + + #self.registered_server = server print("My server: ", self.registered_server) broadcast_socket.close() @@ -53,9 +62,18 @@ class Client(multiprocessing.Process): message = input() if message.lower() == 'exit': break - print(self.registered_server) + + client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + client_socket.connect((self.registered_server[0], int(self.registered_server[1]))) + + client_socket.sendall(bytes(message, 'utf-8')) + + data = client_socket.recv(1024) + print(f"Received response from server: {data.decode('utf-8')}") + + client_socket.close() - client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + #client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) #client_socket.connect((self.server_address, self.server_port)) - client_socket.sendto(str.encode(message), self.registered_server) - client_socket.close() + #client_socket.sendto(str.encode(message), self.registered_server) + #client_socket.close() diff --git a/server.py b/server.py index 99932ea..81f7ec0 100644 --- a/server.py +++ b/server.py @@ -26,14 +26,17 @@ class Server(multiprocessing.Process): client_listener_thread.start() else: + self.send_reply_to_client() + cache_update_listener_thread = threading.Thread(target=self.listen_for_cache_update) - cache_update_listener_thread.start() client_message_listener_thread = threading.Thread(target=self.listen_for_client_messages) + + cache_update_listener_thread.start() client_message_listener_thread.start() def send_reply_to_client(self): - message = 'Hi ' + self.client_address[0] + ' this is your chat-group server ' + self.server_id + '.' + message = 'Hi ' + self.client_address[0] + ' this is your chat-group server ' + self.server_id + '. (' + self.server_address + ':' + str(self.server_port) + ')' server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) server_socket.connect((self.server_address, self.server_port)) server_socket.sendto(str.encode(message), self.client_address) @@ -88,7 +91,8 @@ class Server(multiprocessing.Process): else: print(self.server_id+": "+"Group "+group+" already exists") - self.client_cache_key_offset = self.client_cache_key_offset + 1 + client_count = self.filter_clients(group) + self.client_cache_key_offset = client_count + 1 client_cache_key = group + str(self.client_cache_key_offset) self.local_clients_cache[client_cache_key] = addr @@ -100,16 +104,23 @@ class Server(multiprocessing.Process): group_count = group_count + 1 return group_count + + def filter_clients(self, group): + client_count = 0 + for key in self.local_clients_cache: + if group == key[0]: + client_count = client_count + 1 + + return client_count # Create and run new server def create_server(self, server_id, client_address): - # Bind the socket to the port self.server_port = self.server_port + 1 new_server = Server(client_address, server_id, self.server_port, self.local_servers_cache, self.local_clients_cache) - new_server.send_reply_to_client() + #new_server.send_reply_to_client() return self.server_port @@ -155,10 +166,26 @@ class Server(multiprocessing.Process): self.local_servers_cache = server_cache_json self.local_clients_cache = client_cache_json - print("Group View Server: "+self.local_servers_cache) - print("Group View Clients: "+self.local_clients_cache) + print(self.local_servers_cache) + print(self.local_clients_cache) + + def listen_for_client_messages(self): + + server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + server_socket.bind((self.server_address, self.server_port)) + server_socket.listen() + + print(self.server_id+": "+"Group-chat server is listening for client messages at port: ", self.server_port) + + while True: + conn, addr = server_socket.accept() + print(f"Connection established with {addr}") + + data = conn.recv(1024) + print(f"Received message from client: {data.decode('utf-8')}") - def listen_for_client_messages(): + response = "Hello, client! I received your message." + conn.sendall(bytes(response, 'utf-8')) - return + conn.close() -- GitLab