From b7f774a863db862a6327c1224a2508196da4ca34 Mon Sep 17 00:00:00 2001 From: grozauf Date: Mon, 8 Apr 2019 20:20:53 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=BC=D0=B0=D1=88=D0=BD=D0=B5?= =?UTF-8?q?=D0=B5=20=D0=B7=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=B4?= =?UTF-8?q?=D0=BB=D1=8F=20=D1=82=D1=80=D0=B5=D1=82=D1=8C=D0=B5=D0=B3=D0=BE?= =?UTF-8?q?=20=D1=83=D1=80=D0=BE=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hw_Lesson_03/client/__main__.py | 52 ++++++++++++++++++ .../client/__pycache__/jim.cpython-36.pyc | Bin 0 -> 746 bytes .../__pycache__/settings.cpython-36.pyc | Bin 0 -> 215 bytes hw_Lesson_03/client/jim.py | 21 +++++++ hw_Lesson_03/client/settings.py | 3 + hw_Lesson_03/server/__main__.py | 44 +++++++++++++++ .../server/__pycache__/jim.cpython-36.pyc | Bin 0 -> 746 bytes .../__pycache__/settings.cpython-36.pyc | Bin 0 -> 215 bytes hw_Lesson_03/server/jim.py | 21 +++++++ hw_Lesson_03/server/settings.py | 3 + 10 files changed, 144 insertions(+) create mode 100644 hw_Lesson_03/client/__main__.py create mode 100644 hw_Lesson_03/client/__pycache__/jim.cpython-36.pyc create mode 100644 hw_Lesson_03/client/__pycache__/settings.cpython-36.pyc create mode 100644 hw_Lesson_03/client/jim.py create mode 100644 hw_Lesson_03/client/settings.py create mode 100644 hw_Lesson_03/server/__main__.py create mode 100644 hw_Lesson_03/server/__pycache__/jim.cpython-36.pyc create mode 100644 hw_Lesson_03/server/__pycache__/settings.cpython-36.pyc create mode 100644 hw_Lesson_03/server/jim.py create mode 100644 hw_Lesson_03/server/settings.py diff --git a/hw_Lesson_03/client/__main__.py b/hw_Lesson_03/client/__main__.py new file mode 100644 index 0000000..60d1a9d --- /dev/null +++ b/hw_Lesson_03/client/__main__.py @@ -0,0 +1,52 @@ +from argparse import ArgumentParser +import socket +import datetime +import jim +import settings + + +def get_presence_msg(): + time = datetime.datetime.now() + msg = { + "action": "presence", + "time": time.isoformat(), + "type": "status", + "user": { + "account_name": "anonim", + "status": "Yep, I am here!" + } + } + + return jim.pack(msg) + + +host = getattr(settings, 'HOST', '127.0.0.1') +port = getattr(settings, 'PORT', 7777) + +parser = ArgumentParser() +parser.add_argument('-a', '--addr', type=str, help='Sets ip address') +parser.add_argument('-p', '--port', type=int, help='Sets port') + +args = parser.parse_args() + +if args.ip: + host = args.ip +if args.port: + port = args.port + +try: + sock = socket.socket() + sock.connect((host, port)) + print(f'Client started with {host}:{port}') + while True: + msg = get_presence_msg() + sock.sendall(msg) + response = sock.recv(settings.BUFFERSIZE) + response = jim.unpack(response) + print('Got next response from server:', response) + +except KeyboardInterrupt: + print('Client closed') + + + diff --git a/hw_Lesson_03/client/__pycache__/jim.cpython-36.pyc b/hw_Lesson_03/client/__pycache__/jim.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..60973c6b951fd8e51389dfcff4de494d419e34a2 GIT binary patch literal 746 zcmZ{i&ui2`6vt<>n{Gtq9kNtT%jQrUua1?#CN z&+1W6QM|OLXqet@ov){NAXSU zzu-AM(Y%Dd3ynQ0A}*1g(@OZ4G`Y5e8+NU8bhA_D8o*_YF95js)bAKI14HP<(xm1u V%y@4-D|k6d?&uq71bUsG`x`(?_GkbA literal 0 HcmV?d00001 diff --git a/hw_Lesson_03/client/__pycache__/settings.cpython-36.pyc b/hw_Lesson_03/client/__pycache__/settings.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..309e4ef53ce133744024e32f6cb2dd9c7c60f156 GIT binary patch literal 215 zcmXr!<>i`YzADCqfq~&M5W@i@kmUfx#R5Pgg&~R|g)xdTg(-?Dg*li(lckE&(8yfR z00<2;6Xh5fG8tGH82mJuZ?Smz2Z!8Z3GfdJxy9ua>gMJe6zm!0x{{#?r~pEIbqBJX ztzs_Bzp&wA$At|s?y0HSNkxg7dBrgSl_eSZdGSW^KB>jU`9Oh;aws$2z&Iv3Co?s# kB&ImEq$D#hy;!fH@)n0pZhlH>PO2Tq!NnjuSQuFt0XPjfy#N3J literal 0 HcmV?d00001 diff --git a/hw_Lesson_03/client/jim.py b/hw_Lesson_03/client/jim.py new file mode 100644 index 0000000..88c01a8 --- /dev/null +++ b/hw_Lesson_03/client/jim.py @@ -0,0 +1,21 @@ +import json + + +def pack(dict_msg): + """ + Создание сообщения, пригодного для отправки через TCP + :param dict_msg: dict + :return: str + """ + str_msg = json.dumps(dict_msg) + return str_msg.encode('utf-8') + + +def unpack(bt_str): + """ + Распаквка полученного сообщения + :param bt_str: str + :return: dict + """ + str_decoded = bt_str.decode('utf-8') + return json.loads(str_decoded) \ No newline at end of file diff --git a/hw_Lesson_03/client/settings.py b/hw_Lesson_03/client/settings.py new file mode 100644 index 0000000..0107932 --- /dev/null +++ b/hw_Lesson_03/client/settings.py @@ -0,0 +1,3 @@ +HOST = "127.0.0.1" +PORT = 7777 +BUFFERSIZE = 1024 diff --git a/hw_Lesson_03/server/__main__.py b/hw_Lesson_03/server/__main__.py new file mode 100644 index 0000000..2216496 --- /dev/null +++ b/hw_Lesson_03/server/__main__.py @@ -0,0 +1,44 @@ +from argparse import ArgumentParser +import socket +import datetime +import jim +import settings + + +def get_response_msg(): + msg = { + "response": 200, + "alert": "Необязательное сообщение/уведомление" + } + return jim.pack(msg) + + +host = getattr(settings, 'HOST', '127.0.0.1') +port = getattr(settings, 'PORT', 7777) + +parser = ArgumentParser() +parser.add_argument('-a', '--addr', type=str, help='Sets ip address') +parser.add_argument('-p', '--port', type=int, help='Sets port') + +args = parser.parse_args() + +if args.ip: + host = args.ip +if args.port: + port = args.port + +try: + sock = socket.socket() + sock.bind((host, port)) + sock.listen(5) + print(f'Server started with {host}:{port}') + while True: + client, address = sock.accept() + print(f'Client detected { address }') + request = client.recv(settings.BUFFERSIZE) + request = jim.unpack(request) + print('Got next request from client:', request) + msg = get_response_msg() + client.sendall(msg) +except KeyboardInterrupt: + print('Server closed') diff --git a/hw_Lesson_03/server/__pycache__/jim.cpython-36.pyc b/hw_Lesson_03/server/__pycache__/jim.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5bb19cccb3306ec5b6f93200dae29d5370a0c8e4 GIT binary patch literal 746 zcmZ{i&ui2`6vt<>n{sbFkx)e3gBOv4omm+%)QcE4U zdTZ(x9K$)Bd1@b~*gl0*?^$o%yu=^HB2GOv=oe8cU-%|!DuNfK$b3&0!X#eXW%2yh zy>6>+Co<1!o0aKE)(+45IpbX`=*(4uC7jW6pNX*XI6ohv>-iykfJ(iCDtyHG)`o}& znGDyri_JWX?naNfL{%AXzWNhJcUD8m#Y-;2WRTt-ZP)El+}~=Wmeh_oE)`3-{~z&~ zB>0Oo;sOzm=ZJG0Y7l?K588!GM0{=-RR|OzUZ{y?g+S*>|7E|3Z=;Ct#8;^NIXg|{ zFL(~)nwQXbp|*#4%p|gN8j0YVCf9T@!>)0TZg$E{1GtXy6#y5Xx-Fw-UgAVSQTT!z`*brh~a<{$Z`PUVgVqL!Vtxf!WhMv!W6}n!W_(?$x_8>Xk@Nu z0EC8_iE<1KnG7rp41Su-w^%&we4s!^Ig}Z1U>sANT2z)= j1f)tzGV{`l^$IF)aoFVMr