From 7d616bd3dc0c11e5adf87aac4570277cf3f27d76 Mon Sep 17 00:00:00 2001 From: Tom Wang Date: Wed, 25 Mar 2020 00:07:31 -0700 Subject: [PATCH] Update app_client_blocking.py - using mutable bytearray type as receiving buffer so that the buffer content can be modified inside a method read_to_buffer for DRY. This is equivalent to passing a reference in C/C++ language. --- app_client_blocking.py | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/app_client_blocking.py b/app_client_blocking.py index d9b9675..32f774d 100644 --- a/app_client_blocking.py +++ b/app_client_blocking.py @@ -94,24 +94,22 @@ def main(): print(f"sending request {repr(message)} to {addr}") sock.sendall(message) - _recv_buffer = b"" + _recv_buffer = bytearray(b"") + def read_to_buffer(sock, length, buf : bytearray): + while len(buf) < length: + data = sock.recv(4096) + buf += data # read and process protoheader (fixed length of 2 byte in network order) - _jsonheader_len = None hdrlen = 2 - while len(_recv_buffer) < hdrlen: - data = sock.recv(4096) - _recv_buffer += data + read_to_buffer(sock, hdrlen, _recv_buffer) # process_protoheader() _jsonheader_len = struct.unpack(">H", _recv_buffer[:hdrlen])[0] _recv_buffer = _recv_buffer[hdrlen:] # read and process jsonheader - jsonheader = None - while len(_recv_buffer) < _jsonheader_len: - data = sock.recv(4096) - _recv_buffer += data + read_to_buffer(sock, _jsonheader_len, _recv_buffer) # process_jsonheader() jsonheader = _json_decode(_recv_buffer[:_jsonheader_len], "utf-8") @@ -126,11 +124,8 @@ def main(): raise ValueError(f'Missing required header "{reqhdr}".') # read and process response - response = None content_len = jsonheader["content-length"] - while len(_recv_buffer) < content_len: - data = sock.recv(4096) - _recv_buffer += data + read_to_buffer(sock, content_len, _recv_buffer) # process_response(): data = _recv_buffer[:content_len]