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]