import socket from time import sleep import struct import json def pack_data(data): encoded = data.encode() return struct.pack('I', len(encoded)) + encoded def get_data(connection): buffer = b'' while len(buffer) < 4: data = connection.recv(4 - len(buffer)) if not data: raise ConnectionError('Connection was closed') buffer += data size_packed, buffer = buffer[:4], buffer[4:] if not size_packed: raise ConnectionError('Connection was closed') (size,) = struct.unpack('I', size_packed) data = connection.recv(size - len(buffer)) return buffer + data def parse_data(data): data = json.loads(data.decode()) arr = [f'Найдено {len(data)} совпадений:'] for error in data: arr.append(f"[{error['date']}][{error['type']}][{error['module']}][{error['id']}] {error['text']}") return '\n'.join(arr) HOST, PORT = ADDR = 'localhost', 6001 cnt = 0 sock = socket.socket() while cnt < 10: try: cnt += 1 sock.connect(ADDR) except ConnectionRefusedError: print('Не удалось подключиться к серверу. Следующая попытка через 3 секунды...') sleep(3) else: del cnt break else: print('Не удалось подключиться к серверу через 10 попыток.\nОстанавливаемся...') sock.close() quit() while True: try: data = input('Введите модуль для поиска:\n') except KeyboardInterrupt: break else: sock.sendall(pack_data(data)) response = get_data(sock) print(parse_data(response)) sock.close()