From cbd8ab17ee48553b73bd9e891385dce0e87ae547 Mon Sep 17 00:00:00 2001 From: Anton <stud180315> Date: Thu, 25 Apr 2024 04:24:38 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9A=D0=BB=D0=B8=D0=B5=D0=BD=D1=82=20=D1=81?= =?UTF-8?q?=D0=B5=D1=80=D0=B2=D0=B5=D1=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client.html | 24 ++++++++++++++++++++++++ client.py | 15 +++++++++++++++ server.py | 49 ++++++++++++++++++++++++------------------------- 3 files changed, 63 insertions(+), 25 deletions(-) create mode 100644 client.html create mode 100644 client.py diff --git a/client.html b/client.html new file mode 100644 index 0000000..a13cde5 --- /dev/null +++ b/client.html @@ -0,0 +1,24 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="UTF-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <title>Counter App</title> +</head> +<body> + <h1>Счетчик: <span id="counter">0</span></h1> + <button onclick="incrementCounter()">Увеличить счетчик</button> + + <script> + var ws = new WebSocket("ws://178.44.100.206:8765"); + + ws.onmessage = function(event) { + document.getElementById('counter').innerText = event.data; + }; + + function incrementCounter() { + ws.send("increment"); + } + </script> +</body> +</html> \ No newline at end of file diff --git a/client.py b/client.py new file mode 100644 index 0000000..a556711 --- /dev/null +++ b/client.py @@ -0,0 +1,15 @@ +import asyncio +import websockets + +async def send_message(uri, message): + async with websockets.connect(uri) as websocket: + await websocket.send(message) + response = await websocket.recv() + print(f"Received response from server: {response}") + +async def main(): + uri = "ws://178.44.100.206:8765" # Замените на адрес вашего сервера WebSocket + message = "Hello, server!" + await send_message(uri, message) + +asyncio.run(main()) \ No newline at end of file diff --git a/server.py b/server.py index dc9a01c..9b37196 100644 --- a/server.py +++ b/server.py @@ -1,29 +1,28 @@ -import socket +import asyncio +import websockets -# Создаем сокет -server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) +counter = 0 +connected_clients = set() -# Задаем хост и порт для сервера -host = "94.241.227.75" -port = 12346 +async def counter_server(websocket, path): + global counter + connected_clients.add(websocket) + try: + await websocket.send(str(counter)) + async for message in websocket: + if message == 'increment': + counter += 1 + # Отправляем обновление счетчика всем клиентам + await asyncio.gather(*[client.send(str(counter)) for client in connected_clients]) + finally: + connected_clients.remove(websocket) -# Связываем сокет с адресом и портом -server_socket.bind((host, port)) +def run_server(): + PORT = 8765 + start_server = websockets.serve(counter_server, "178.44.100.206", PORT) + asyncio.get_event_loop().run_until_complete(start_server) + print(f'Server started on ws://http://178.44.100.206/:{PORT}') + asyncio.get_event_loop().run_forever() -# Слушаем входящие подключения -server_socket.listen(3) -print(f"Сервер запущен на http://{host}:{port}/") - -while True: - # Принимаем входящее подключение - client_socket, client_address = server_socket.accept() - - # Отвечаем клиенту - response_body = "Hello" - response_headers = "HTTP/1.1 200 OK\nContent-Type: text/plain\nContent-Length: " + str(len(response_body)) + "\n\n" - response = response_headers + response_body - - client_socket.sendall(response.encode("utf-8")) - - # Закрываем соединение с клиентом - client_socket.close() \ No newline at end of file +if __name__ == '__main__': + run_server() \ No newline at end of file