diff --git "a/works/K3320/\320\223\321\203\321\201\320\265\320\262_\320\257\321\200\320\276\321\201\320\273\320\260\320\262/6/part1/__pycache__/main.cpython-313.pyc" "b/works/K3320/\320\223\321\203\321\201\320\265\320\262_\320\257\321\200\320\276\321\201\320\273\320\260\320\262/6/part1/__pycache__/main.cpython-313.pyc" new file mode 100644 index 000000000..7590e7dc5 Binary files /dev/null and "b/works/K3320/\320\223\321\203\321\201\320\265\320\262_\320\257\321\200\320\276\321\201\320\273\320\260\320\262/6/part1/__pycache__/main.cpython-313.pyc" differ diff --git "a/works/K3320/\320\223\321\203\321\201\320\265\320\262_\320\257\321\200\320\276\321\201\320\273\320\260\320\262/6/part1/client.py" "b/works/K3320/\320\223\321\203\321\201\320\265\320\262_\320\257\321\200\320\276\321\201\320\273\320\260\320\262/6/part1/client.py" new file mode 100644 index 000000000..8026b97bc --- /dev/null +++ "b/works/K3320/\320\223\321\203\321\201\320\265\320\262_\320\257\321\200\320\276\321\201\320\273\320\260\320\262/6/part1/client.py" @@ -0,0 +1,34 @@ +import socket +import time + +conn = socket.socket() + +conn.connect( ("127.0.0.1", 8080) ) +conn.setblocking(0) + +def recv_data(conn): + data = b"" + time.sleep(2) + try: + tmp = conn.recv(1024) + while tmp: + data += tmp + tmp = conn.recv(1024) + except BlockingIOError: + pass + return data + + +def main(): + data = b"Hello server!\r\n\r\n" + + + print(f"Sending message: {data}") + conn.send(data) + data = recv_data(conn) + print(f"Получен ответ: {data.decode("utf-8")}") + conn.close() + + +if __name__ == "__main__": + main() \ No newline at end of file diff --git "a/works/K3320/\320\223\321\203\321\201\320\265\320\262_\320\257\321\200\320\276\321\201\320\273\320\260\320\262/6/part1/server.py" "b/works/K3320/\320\223\321\203\321\201\320\265\320\262_\320\257\321\200\320\276\321\201\320\273\320\260\320\262/6/part1/server.py" new file mode 100644 index 000000000..0f62a34fe --- /dev/null +++ "b/works/K3320/\320\223\321\203\321\201\320\265\320\262_\320\257\321\200\320\276\321\201\320\273\320\260\320\262/6/part1/server.py" @@ -0,0 +1,83 @@ +import socket +import traceback +from logging import getLogger, basicConfig, INFO + +# Configure logger +basicConfig(level=INFO, format='%(asctime)s - %(levelname)s - %(message)s') +logger = getLogger() + +def send_answer(conn, status="200 OK", typ="text/plain; charset=utf-8", data=""): + addr = conn.getpeername() + logger.info(f"[{addr[0]}:{addr[1]}] Answering with: \"{data}\"") + data = data.encode("utf-8") + try: + conn.sendall(data) + logger.info(f"[{addr[0]}:{addr[1]}] Successfully sent response.") + except BrokenPipeError: + logger.error(f"[{addr[0]}:{addr[1]}] Connection closed before response could be sent.") + +def parse(conn): + addr = conn.getpeername() + conn.settimeout(1.0) + data = b"" + try: + tmp = conn.recv(1024) + while tmp and "\r\n\r\n" not in str(tmp): + data += tmp + tmp = conn.recv(1024) + except socket.timeout: + logger.warning(f"[{addr[0]}:{addr[1]}] Timed out waiting for data.") + + if not data: + return + + udata = data.decode("utf-8") + # logger.info(udata) + + logger.info(f"[{addr[0]}:{addr[1]}] sent message: \"{udata}\"") + + answer = "Hello, client" + send_answer(conn, data=answer) + +sock = socket.socket() +sock.bind(("", 8080)) +sock.listen(5) +sock.settimeout(1.0) + +logger.info("Server started on port 8080. Press Ctrl+C to stop.") + +try: + while True: + try: + conn, addr = sock.accept() + conn.setblocking(0) + except socket.timeout: + continue + except KeyboardInterrupt: + break + except Exception as e: + logger.error("Unexpected error during accept: %s", e) + logger.error(traceback.format_exc()) + continue + + try: + logger.info("New connection from %s:%s", addr[0], addr[1]) + parse(conn) + except Exception as e: + logger.error("Exception occurred while handling request: %s", e) + logger.error(traceback.format_exc()) + try: + send_answer(conn, "500 Internal Server Error", data="Ошибка") + except: + pass + finally: + try: + conn.close() + except: + pass + +except KeyboardInterrupt: + logger.info("Server stopped by user.") +finally: + sock.close() + logger.info("Socket closed.") \ No newline at end of file diff --git "a/works/K3320/\320\223\321\203\321\201\320\265\320\262_\320\257\321\200\320\276\321\201\320\273\320\260\320\262/6/part2/__pycache__/main.cpython-313.pyc" "b/works/K3320/\320\223\321\203\321\201\320\265\320\262_\320\257\321\200\320\276\321\201\320\273\320\260\320\262/6/part2/__pycache__/main.cpython-313.pyc" new file mode 100644 index 000000000..7590e7dc5 Binary files /dev/null and "b/works/K3320/\320\223\321\203\321\201\320\265\320\262_\320\257\321\200\320\276\321\201\320\273\320\260\320\262/6/part2/__pycache__/main.cpython-313.pyc" differ diff --git "a/works/K3320/\320\223\321\203\321\201\320\265\320\262_\320\257\321\200\320\276\321\201\320\273\320\260\320\262/6/part2/client.py" "b/works/K3320/\320\223\321\203\321\201\320\265\320\262_\320\257\321\200\320\276\321\201\320\273\320\260\320\262/6/part2/client.py" new file mode 100644 index 000000000..055555f68 --- /dev/null +++ "b/works/K3320/\320\223\321\203\321\201\320\265\320\262_\320\257\321\200\320\276\321\201\320\273\320\260\320\262/6/part2/client.py" @@ -0,0 +1,16 @@ +import socket +import json + +def main(): + a = input("Введите катет a: ") + b = input("Введите катет b: ") + request = {"a": a, "b": b} + + with socket.socket() as conn: + conn.connect(("127.0.0.1", 8080)) + conn.sendall(json.dumps(request).encode("utf-8")) + response = conn.recv(1024).decode("utf-8") + print("Ответ от сервера:", response) + +if __name__ == "__main__": + main() diff --git "a/works/K3320/\320\223\321\203\321\201\320\265\320\262_\320\257\321\200\320\276\321\201\320\273\320\260\320\262/6/part2/server.py" "b/works/K3320/\320\223\321\203\321\201\320\265\320\262_\320\257\321\200\320\276\321\201\320\273\320\260\320\262/6/part2/server.py" new file mode 100644 index 000000000..e4b725145 --- /dev/null +++ "b/works/K3320/\320\223\321\203\321\201\320\265\320\262_\320\257\321\200\320\276\321\201\320\273\320\260\320\262/6/part2/server.py" @@ -0,0 +1,38 @@ +import socket +import json +from math import sqrt + +def handle_connection(conn): + data = conn.recv(1024) + if not data: + return + try: + request = json.loads(data.decode("utf-8")) + a = float(request["a"]) + b = float(request["b"]) + c = sqrt(a ** 2 + b ** 2) + response = f"Гипотенуза: {c:.2f}" + except Exception as e: + response = f"Ошибка обработки запроса: {e}" + print(f"Ответ клиенту {conn.getpeername()}: {response}") + conn.sendall(response.encode("utf-8")) + conn.close() + +def main(): + sock = socket.socket() + sock.bind(("", 8080)) + sock.listen(5) + sock.settimeout(5.0) + print("Сервер запущен на порту 8080...") + try: + while True: + conn, addr = sock.accept() + print(f"Подключение от {addr}") + handle_connection(conn) + except KeyboardInterrupt: + print("Сервер остановлен.") + finally: + sock.close() + +if __name__ == "__main__": + main() diff --git "a/works/K3320/\320\223\321\203\321\201\320\265\320\262_\320\257\321\200\320\276\321\201\320\273\320\260\320\262/6/part3/__pycache__/main.cpython-313.pyc" "b/works/K3320/\320\223\321\203\321\201\320\265\320\262_\320\257\321\200\320\276\321\201\320\273\320\260\320\262/6/part3/__pycache__/main.cpython-313.pyc" new file mode 100644 index 000000000..7590e7dc5 Binary files /dev/null and "b/works/K3320/\320\223\321\203\321\201\320\265\320\262_\320\257\321\200\320\276\321\201\320\273\320\260\320\262/6/part3/__pycache__/main.cpython-313.pyc" differ diff --git "a/works/K3320/\320\223\321\203\321\201\320\265\320\262_\320\257\321\200\320\276\321\201\320\273\320\260\320\262/6/part3/client.py" "b/works/K3320/\320\223\321\203\321\201\320\265\320\262_\320\257\321\200\320\276\321\201\320\273\320\260\320\262/6/part3/client.py" new file mode 100644 index 000000000..6fef8cace --- /dev/null +++ "b/works/K3320/\320\223\321\203\321\201\320\265\320\262_\320\257\321\200\320\276\321\201\320\273\320\260\320\262/6/part3/client.py" @@ -0,0 +1,24 @@ +import socket + +HOST = "127.0.0.1" +PORT = 8080 + +def main(): + request = "GET / HTTP/1.1\r\nHost: localhost\r\nConnection: close\r\n\r\n" + + with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as client: + client.connect((HOST, PORT)) + client.sendall(request.encode("utf-8")) + + response = b"" + while True: + data = client.recv(1024) + if not data: + break + response += data + + print("Ответ от сервера:") + print(response.decode("utf-8")) + +if __name__ == "__main__": + main() \ No newline at end of file diff --git "a/works/K3320/\320\223\321\203\321\201\320\265\320\262_\320\257\321\200\320\276\321\201\320\273\320\260\320\262/6/part3/index.html" "b/works/K3320/\320\223\321\203\321\201\320\265\320\262_\320\257\321\200\320\276\321\201\320\273\320\260\320\262/6/part3/index.html" new file mode 100644 index 000000000..35c24c3f7 --- /dev/null +++ "b/works/K3320/\320\223\321\203\321\201\320\265\320\262_\320\257\321\200\320\276\321\201\320\273\320\260\320\262/6/part3/index.html" @@ -0,0 +1,11 @@ + + +
+ +Это HTML-страница, полученная от Python-сервера.
+ + \ No newline at end of file diff --git "a/works/K3320/\320\223\321\203\321\201\320\265\320\262_\320\257\321\200\320\276\321\201\320\273\320\260\320\262/6/part3/server.py" "b/works/K3320/\320\223\321\203\321\201\320\265\320\262_\320\257\321\200\320\276\321\201\320\273\320\260\320\262/6/part3/server.py" new file mode 100644 index 000000000..a3e8ce810 --- /dev/null +++ "b/works/K3320/\320\223\321\203\321\201\320\265\320\262_\320\257\321\200\320\276\321\201\320\273\320\260\320\262/6/part3/server.py" @@ -0,0 +1,50 @@ +import socket +import os + +HOST = "" +PORT = 8080 +HTML_FILE = "index.html" + +def load_html(): + if not os.path.exists(HTML_FILE): + return "