From ce17eacde37c124abe07288ae1453b5b658f8ff2 Mon Sep 17 00:00:00 2001 From: Andrew Date: Wed, 17 Apr 2019 15:01:38 +0400 Subject: =?UTF-8?q?=D0=A7=D0=B5=D1=82=D0=B2=D0=B5=D1=80=D1=82=D1=8B=D0=B9?= =?UTF-8?q?=20=D0=B4=D0=B5=D0=BD=D1=8C,=20=D0=B7=D0=B0=D0=B4=D0=B0=D1=87?= =?UTF-8?q?=D0=B0=20=D0=BD=D0=BE=D0=BC=D0=B5=D1=80=203?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- day4/task3/client.py | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 day4/task3/client.py (limited to 'day4/task3/client.py') diff --git a/day4/task3/client.py b/day4/task3/client.py new file mode 100644 index 0000000..7f5c298 --- /dev/null +++ b/day4/task3/client.py @@ -0,0 +1,72 @@ +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() -- cgit v1.2.3 From 588cdffdc1f527fac5a7bdd934008882e3efc70d Mon Sep 17 00:00:00 2001 From: Andrew Date: Wed, 17 Apr 2019 20:12:14 +0400 Subject: =?UTF-8?q?=D0=A3=D1=81=D0=BA=D0=BE=D1=80=D0=B5=D0=BD=20=D0=BF?= =?UTF-8?q?=D0=BE=D0=B8=D1=81=D0=BA=20=D0=BF=D0=BE=20=D0=BB=D0=BE=D0=B3?= =?UTF-8?q?=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- day4/task3/client.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'day4/task3/client.py') diff --git a/day4/task3/client.py b/day4/task3/client.py index 7f5c298..49663c8 100644 --- a/day4/task3/client.py +++ b/day4/task3/client.py @@ -28,14 +28,10 @@ def get_data(connection): 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) + return json.loads(data.decode()) -HOST, PORT = ADDR = 'localhost', 6001 +HOST, PORT = ADDR = 'localhost', 6000 cnt = 0 sock = socket.socket() @@ -67,6 +63,10 @@ while True: else: sock.sendall(pack_data(data)) response = get_data(sock) - print(parse_data(response)) + arr = parse_data(response) + + print(f'Найдено {len(arr)} совпадений:') + for line in arr: + print(line) sock.close() -- cgit v1.2.3 From 4a3db50d7df0f636ef824637d33330543e9044b2 Mon Sep 17 00:00:00 2001 From: Andrew Date: Wed, 24 Apr 2019 20:42:29 +0400 Subject: =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F=20=D1=82=D1=80=D0=B5=D1=82=D1=8C=D0=B5=D0=B9=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=B4=D0=B0=D1=87=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- day4/task3/client.py | 77 ++++++++++++++++++++++++++++++---------------------- 1 file changed, 45 insertions(+), 32 deletions(-) (limited to 'day4/task3/client.py') diff --git a/day4/task3/client.py b/day4/task3/client.py index 49663c8..18bb2b1 100644 --- a/day4/task3/client.py +++ b/day4/task3/client.py @@ -4,6 +4,10 @@ import struct import json +HOST, PORT = ADDR = 'localhost', 6000 +DATATYPE_SIZE = 4 # int + + def pack_data(data): encoded = data.encode() return struct.pack('I', len(encoded)) + encoded @@ -11,14 +15,15 @@ def pack_data(data): def get_data(connection): buffer = b'' - while len(buffer) < 4: - data = connection.recv(4 - len(buffer)) + # Считываем размер пакета + while len(buffer) < DATATYPE_SIZE: + data = connection.recv(DATATYPE_SIZE - len(buffer)) if not data: raise ConnectionError('Connection was closed') buffer += data - size_packed, buffer = buffer[:4], buffer[4:] + size_packed, buffer = buffer[:DATATYPE_SIZE], buffer[DATATYPE_SIZE:] if not size_packed: raise ConnectionError('Connection was closed') @@ -31,42 +36,50 @@ def parse_data(data): return json.loads(data.decode()) -HOST, PORT = ADDR = 'localhost', 6000 +def try_connect(): + cnt = 0 + sock = socket.socket() + while cnt < 10: + try: + cnt += 1 + sock.connect(ADDR) -cnt = 0 -sock = socket.socket() -while cnt < 10: - try: - cnt += 1 - sock.connect(ADDR) + except ConnectionRefusedError: + print('Не удалось подключиться к серверу. Следующая попытка через 3 секунды...') + sleep(3) - except ConnectionRefusedError: - print('Не удалось подключиться к серверу. Следующая попытка через 3 секунды...') - sleep(3) + else: + return sock else: - del cnt - break -else: - print('Не удалось подключиться к серверу через 10 попыток.\nОстанавливаемся...') - sock.close() - quit() + print('Не удалось подключиться к серверу через 10 попыток.\nОстанавливаемся...') + sock.close() + return -while True: - try: - data = input('Введите модуль для поиска:\n') +def main(): + sock = try_connect() + if sock is None: + quit() - except KeyboardInterrupt: - break + while True: + try: + data = input('Введите модуль для поиска:\n') - else: - sock.sendall(pack_data(data)) - response = get_data(sock) - arr = parse_data(response) + except KeyboardInterrupt: + break + + else: + sock.sendall(pack_data(data)) + response = get_data(sock) + arr = parse_data(response) + + print(f'Найдено {len(arr)} совпадений:') + for line in arr: + print(line) + + sock.close() - print(f'Найдено {len(arr)} совпадений:') - for line in arr: - print(line) -sock.close() +if __name__ == '__main__': + main() -- cgit v1.2.3