From 5e596bdef700311890a7c67eda38b599611e5045 Mon Sep 17 00:00:00 2001 From: Aryan Singh Date: Sat, 12 Sep 2026 11:11:49 -0500 Subject: [PATCH] added variable length receiving and sending --- MP1/client.py | 24 ++++++++++++++++++++++-- MP1/server.py | 26 +++++++++++++++++++++++--- 2 files changed, 45 insertions(+), 5 deletions(-) diff --git a/MP1/client.py b/MP1/client.py index 8dac95a..d8ba792 100644 --- a/MP1/client.py +++ b/MP1/client.py @@ -15,6 +15,26 @@ ALL_IPS = [ "172.22.156.6" ] +def send_message(sock, message): + e_data = message.encode('utf-8') + #header for the message length + header = str(len(e_data)).zfill(10).encode('utf-8') + sock.sendall(header) + sock.sendall(e_data) + +def receive_message(sock): + header = sock.recv(10) + if not header: + return None + message_length = int(header.decode('utf-8')) + received_data = b"" + while len(received_data) < message_length: + chunk = sock.recv(65536) + if not chunk: + break + received_data += chunk + return received_data.decode('utf-8') + def grep_all_ips(ips, cmd): match_count = [] @@ -26,8 +46,8 @@ def grep_all_ips(ips, cmd): full_cmd = cmd + f" ./machine.{i + 1}.log" - client_socket.sendall(full_cmd.encode()) - data = client_socket.recv(65536).decode() + send_message(client_socket, full_cmd) + data = receive_message(client_socket) count = len(data.splitlines()) match_count.append(count) diff --git a/MP1/server.py b/MP1/server.py index 19e2cf0..d7b2253 100644 --- a/MP1/server.py +++ b/MP1/server.py @@ -13,11 +13,31 @@ server_socket.listen() print(f"Server listening on {HOST}:{PORT}") +def send_message(sock, message): + e_data = message.encode('utf-8') + #header for the message length + header = str(len(e_data)).zfill(10).encode('utf-8') + sock.sendall(header) + sock.sendall(e_data) + +def receive_message(sock): + header = sock.recv(10) + if not header: + return None + message_length = int(header.decode('utf-8')) + received_data = b"" + while len(received_data) < message_length: + chunk = sock.recv(65536) + if not chunk: + break + received_data += chunk + return received_data.decode('utf-8') + while True: conn, addr = server_socket.accept() print(f"Connected by {addr}") - command = conn.recv(65536) + command = receive_message(conn) # print("Received Grep Command:", command.decode()) command_args = shlex.split(command.decode()) @@ -32,8 +52,8 @@ while True: result = subprocess.run(command_args, capture_output=True, text=True) - conn.sendall(result.stdout.encode()) + send_message(conn, result.stdout) conn.close() -server_socket.close() \ No newline at end of file +server_socket.close()