diff --git "a/works/\320\2323323/\320\237\320\265\321\202\321\200\320\276\320\262\320\260_\320\222\320\270\320\272\321\202\320\276\321\200\320\270\321\217/lab6/task1/client.py" "b/works/\320\2323323/\320\237\320\265\321\202\321\200\320\276\320\262\320\260_\320\222\320\270\320\272\321\202\320\276\321\200\320\270\321\217/lab6/task1/client.py"
new file mode 100644
index 000000000..8b584c63c
--- /dev/null
+++ "b/works/\320\2323323/\320\237\320\265\321\202\321\200\320\276\320\262\320\260_\320\222\320\270\320\272\321\202\320\276\321\200\320\270\321\217/lab6/task1/client.py"
@@ -0,0 +1,10 @@
+import socket
+
+# Установка соединения с сервером
+with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as client:
+ client.connect(('127.0.0.1', 5000))
+ greeting = "Hello, server"
+ client.send(greeting.encode('utf-8'))
+
+ reply = client.recv(1024).decode('utf-8')
+ print(f"Ответ от сервера: {reply}")
diff --git "a/works/\320\2323323/\320\237\320\265\321\202\321\200\320\276\320\262\320\260_\320\222\320\270\320\272\321\202\320\276\321\200\320\270\321\217/lab6/task1/server.py" "b/works/\320\2323323/\320\237\320\265\321\202\321\200\320\276\320\262\320\260_\320\222\320\270\320\272\321\202\320\276\321\200\320\270\321\217/lab6/task1/server.py"
new file mode 100644
index 000000000..4799c3445
--- /dev/null
+++ "b/works/\320\2323323/\320\237\320\265\321\202\321\200\320\276\320\262\320\260_\320\222\320\270\320\272\321\202\320\276\321\200\320\270\321\217/lab6/task1/server.py"
@@ -0,0 +1,16 @@
+import socket
+
+# Инициализация TCP-сервера
+with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as server:
+ server.bind(('127.0.0.1', 5000))
+ server.listen()
+ print("Сервер ожидает подключения...")
+
+ conn, address = server.accept()
+ with conn:
+ print(f"Клиент подключён с адреса: {address}")
+ message = conn.recv(1024).decode('utf-8')
+ print(f"Сообщение от клиента: {message}")
+
+ response = "Hello, client"
+ conn.send(response.encode('utf-8'))
diff --git "a/works/\320\2323323/\320\237\320\265\321\202\321\200\320\276\320\262\320\260_\320\222\320\270\320\272\321\202\320\276\321\200\320\270\321\217/lab6/task2/client.py" "b/works/\320\2323323/\320\237\320\265\321\202\321\200\320\276\320\262\320\260_\320\222\320\270\320\272\321\202\320\276\321\200\320\270\321\217/lab6/task2/client.py"
new file mode 100644
index 000000000..50e961972
--- /dev/null
+++ "b/works/\320\2323323/\320\237\320\265\321\202\321\200\320\276\320\262\320\260_\320\222\320\270\320\272\321\202\320\276\321\200\320\270\321\217/lab6/task2/client.py"
@@ -0,0 +1,19 @@
+import socket
+
+# Получаем значения катетов от пользователя
+a = input("Введите длину первого катета: ")
+b = input("Введите длину второго катета: ")
+
+message = f"{a} {b}"
+
+client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+client_socket.connect(('localhost', 5000))
+
+# Отправляем сообщение серверу
+client_socket.sendall(message.encode())
+
+# Получаем ответ от сервера
+data = client_socket.recv(1024).decode()
+print("Ответ от сервера:", data)
+
+client_socket.close()
diff --git "a/works/\320\2323323/\320\237\320\265\321\202\321\200\320\276\320\262\320\260_\320\222\320\270\320\272\321\202\320\276\321\200\320\270\321\217/lab6/task2/server.py" "b/works/\320\2323323/\320\237\320\265\321\202\321\200\320\276\320\262\320\260_\320\222\320\270\320\272\321\202\320\276\321\200\320\270\321\217/lab6/task2/server.py"
new file mode 100644
index 000000000..257e41440
--- /dev/null
+++ "b/works/\320\2323323/\320\237\320\265\321\202\321\200\320\276\320\262\320\260_\320\222\320\270\320\272\321\202\320\276\321\200\320\270\321\217/lab6/task2/server.py"
@@ -0,0 +1,30 @@
+import socket
+import math
+
+# Функция для вычисления гипотенузы по Теореме Пифагора
+def pythagorean_theorem(a, b):
+ return math.sqrt(a**2 + b**2)
+
+server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+server_socket.bind(('localhost', 5000))
+server_socket.listen(1)
+print("Сервер запущен и ожидает подключение...")
+
+conn, addr = server_socket.accept()
+print(f"Подключился клиент: {addr}")
+
+data = conn.recv(1024).decode()
+
+print("Получено от клиента:", data)
+
+try:
+ # Преобразуем входные данные в два числа
+ a, b = map(float, data.split())
+ hypotenuse = pythagorean_theorem(a, b)
+ response = f"Гипотенуза: {hypotenuse}"
+except ValueError:
+ response = "Ошибка: введите два числа через пробел."
+
+conn.sendall(response.encode())
+conn.close()
+server_socket.close()
diff --git "a/works/\320\2323323/\320\237\320\265\321\202\321\200\320\276\320\262\320\260_\320\222\320\270\320\272\321\202\320\276\321\200\320\270\321\217/lab6/task3/index.html" "b/works/\320\2323323/\320\237\320\265\321\202\321\200\320\276\320\262\320\260_\320\222\320\270\320\272\321\202\320\276\321\200\320\270\321\217/lab6/task3/index.html"
new file mode 100644
index 000000000..990e7bea9
--- /dev/null
+++ "b/works/\320\2323323/\320\237\320\265\321\202\321\200\320\276\320\262\320\260_\320\222\320\270\320\272\321\202\320\276\321\200\320\270\321\217/lab6/task3/index.html"
@@ -0,0 +1,12 @@
+
+
+
+
+ HELLO
+
+
+
+ HELLO WORLD
+
+
+
\ No newline at end of file
diff --git "a/works/\320\2323323/\320\237\320\265\321\202\321\200\320\276\320\262\320\260_\320\222\320\270\320\272\321\202\320\276\321\200\320\270\321\217/lab6/task3/server.py" "b/works/\320\2323323/\320\237\320\265\321\202\321\200\320\276\320\262\320\260_\320\222\320\270\320\272\321\202\320\276\321\200\320\270\321\217/lab6/task3/server.py"
new file mode 100644
index 000000000..abb094303
--- /dev/null
+++ "b/works/\320\2323323/\320\237\320\265\321\202\321\200\320\276\320\262\320\260_\320\222\320\270\320\272\321\202\320\276\321\200\320\270\321\217/lab6/task3/server.py"
@@ -0,0 +1,33 @@
+import socket
+
+def build_http_response():
+ with open('index.html', 'r', encoding='utf-8') as file:
+ content = file.read()
+
+ status_line = "HTTP/1.1 200 OK\r\n"
+ headers = f"Content-Type: text/html; charset=utf-8\r\nContent-Length: {len(content.encode('utf-8'))}\r\n\r\n"
+ return (status_line + headers + content).encode('utf-8')
+
+def run_server():
+ with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as server:
+ server.bind(('127.0.0.1', 4000))
+ server.listen(1)
+ print("Веб-сервер запущен по адресу http://127.0.0.1:4000")
+
+ try:
+ while True:
+ client, addr = server.accept()
+ with client:
+ print(f"Новое подключение от: {addr}")
+ request_data = client.recv(1024).decode('utf-8')
+ print("Запрос от клиента:")
+ print(request_data)
+
+ http_response = build_http_response()
+ client.sendall(http_response)
+
+ except KeyboardInterrupt:
+ print("\nОстановка сервера...")
+
+if __name__ == "__main__":
+ run_server()
diff --git "a/works/\320\2323323/\320\237\320\265\321\202\321\200\320\276\320\262\320\260_\320\222\320\270\320\272\321\202\320\276\321\200\320\270\321\217/lab6/task4/chat.kv" "b/works/\320\2323323/\320\237\320\265\321\202\321\200\320\276\320\262\320\260_\320\222\320\270\320\272\321\202\320\276\321\200\320\270\321\217/lab6/task4/chat.kv"
new file mode 100644
index 000000000..ae3e1b25e
--- /dev/null
+++ "b/works/\320\2323323/\320\237\320\265\321\202\321\200\320\276\320\262\320\260_\320\222\320\270\320\272\321\202\320\276\321\200\320\270\321\217/lab6/task4/chat.kv"
@@ -0,0 +1,69 @@
+#:kivy 2.3.0
+
+:
+ size_hint_y: None
+ height: self.minimum_height
+ padding: 10
+ orientation: 'horizontal'
+
+ canvas.before:
+ Color:
+ rgba: 0.2, 0.2, 0.2, 0.8
+ RoundedRectangle:
+ pos: self.pos
+ size: self.size
+ radius: [15]
+
+ Label:
+ id: msg_label
+ text: ''
+ markup: True
+ color: 1, 1, 1, 1
+ halign: 'left'
+ valign: 'middle'
+ size_hint_x: 1
+ size_hint_y: None
+ text_size: self.width, None
+ height: self.texture_size[1] + 20
+ padding: 10, 10
+
+:
+ orientation: 'vertical'
+
+ # Панель сообщений
+ ScrollView:
+ id: messages_panel
+ size_hint_y: 0.85
+ do_scroll_x: False
+ do_scroll_y: True
+
+ GridLayout:
+ id: messages_container
+ cols: 1
+ size_hint_y: None
+ height: self.minimum_height
+ spacing: 5
+ padding: 5
+
+ # Нижняя панель ввода сообщения
+ BoxLayout:
+ size_hint_y: None
+ height: 50
+ spacing: 5
+ padding: 5
+
+ TextInput:
+ id: input_field
+ multiline: False
+ size_hint_x: 0.8
+ background_color: 0.2, 0.2, 0.2, 1
+ foreground_color: 1, 1, 1, 1
+ padding: 10
+
+ Button:
+ text: 'Отправить'
+ size_hint_x: 0.2
+ background_normal: ''
+ background_color: 0.2, 0.6, 0.2, 1
+ color: 1, 1, 1, 1
+ on_press: root.send_message(self)
diff --git "a/works/\320\2323323/\320\237\320\265\321\202\321\200\320\276\320\262\320\260_\320\222\320\270\320\272\321\202\320\276\321\200\320\270\321\217/lab6/task4/client.py" "b/works/\320\2323323/\320\237\320\265\321\202\321\200\320\276\320\262\320\260_\320\222\320\270\320\272\321\202\320\276\321\200\320\270\321\217/lab6/task4/client.py"
new file mode 100644
index 000000000..90497cdfd
--- /dev/null
+++ "b/works/\320\2323323/\320\237\320\265\321\202\321\200\320\276\320\262\320\260_\320\222\320\270\320\272\321\202\320\276\321\200\320\270\321\217/lab6/task4/client.py"
@@ -0,0 +1,81 @@
+import socket
+import threading
+from kivy.app import App
+from kivy.uix.boxlayout import BoxLayout
+from kivy.uix.popup import Popup
+from kivy.uix.textinput import TextInput
+from kivy.uix.button import Button
+from kivy.clock import Clock
+from kivy.core.window import Window
+from kivy.factory import Factory
+import random
+
+class Messenger(BoxLayout):
+ def __init__(self, **kwargs):
+ super().__init__(**kwargs)
+ self.sock = None
+ self.username = "Пользователь"
+ self.color = self.get_random_color()
+ Window.size = (400, 600)
+ Clock.schedule_once(lambda dt: self.show_login_popup())
+
+ def get_random_color(self):
+ return '#{:02x}{:02x}{:02x}'.format(
+ int(random.uniform(0.5, 1.0)*255),
+ int(random.uniform(0.5, 1.0)*255),
+ int(random.uniform(0.5, 1.0)*255)
+ )
+
+ def show_login_popup(self):
+ box = BoxLayout(orientation='vertical', spacing=10, padding=10)
+ input_name = TextInput(hint_text="Ваше имя", multiline=False)
+ btn = Button(text="Присоединиться", size_hint=(1, 0.3))
+ box.add_widget(input_name)
+ box.add_widget(btn)
+
+ popup = Popup(title="Вход в чат", content=box, size_hint=(0.7, 0.3), auto_dismiss=False)
+
+ def join_chat(_):
+ self.username = input_name.text.strip() or "Гость"
+ popup.dismiss()
+ self.start_socket()
+
+ btn.bind(on_press=join_chat)
+ popup.open()
+
+ def start_socket(self):
+ self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+ self.sock.connect(('127.0.0.1', 9090))
+ self.sock.send(self.username.encode('utf-8'))
+ threading.Thread(target=self.listen_server, daemon=True).start()
+
+ def listen_server(self):
+ while True:
+ try:
+ msg = self.sock.recv(1024).decode('utf-8')
+ if msg:
+ color, sender, text = msg.split(":", 2)
+ Clock.schedule_once(lambda dt: self.display_message(text, color))
+ except:
+ break
+
+ def send_message(self, _):
+ if self.sock:
+ content = self.ids.input_field.text.strip()
+ if content:
+ self.display_message(f"[b]{self.username}:[/b] {content}", self.color)
+ self.sock.send(content.encode('utf-8'))
+ self.ids.input_field.text = ''
+
+ def display_message(self, message, color):
+ bubble = Factory.MessageBubble()
+ bubble.ids.msg_label.text = f"[color={color}]{message}[/color]"
+ self.ids.messages_container.add_widget(bubble)
+ self.ids.messages_container.height += bubble.height
+
+class ChatApp(App):
+ def build(self):
+ return Messenger()
+
+if __name__ == '__main__':
+ ChatApp().run()
diff --git "a/works/\320\2323323/\320\237\320\265\321\202\321\200\320\276\320\262\320\260_\320\222\320\270\320\272\321\202\320\276\321\200\320\270\321\217/lab6/task4/server.py" "b/works/\320\2323323/\320\237\320\265\321\202\321\200\320\276\320\262\320\260_\320\222\320\270\320\272\321\202\320\276\321\200\320\270\321\217/lab6/task4/server.py"
new file mode 100644
index 000000000..3e55cbafb
--- /dev/null
+++ "b/works/\320\2323323/\320\237\320\265\321\202\321\200\320\276\320\262\320\260_\320\222\320\270\320\272\321\202\320\276\321\200\320\270\321\217/lab6/task4/server.py"
@@ -0,0 +1,60 @@
+import socket
+import threading
+import random
+
+active_users = {} # conn: (username, color)
+
+def random_color():
+ min_lightness = 0.5
+ r = random.uniform(min_lightness, 1.0)
+ g = random.uniform(min_lightness, 1.0)
+ b = random.uniform(min_lightness, 1.0)
+ return '#{:02x}{:02x}{:02x}'.format(int(r*255), int(g*255), int(b*255))
+
+def handle_connection(conn, addr):
+ try:
+ name = conn.recv(1024).decode('utf-8').strip()
+ color = random_color()
+ active_users[conn] = (name, color)
+
+ print(f"{name} присоединился с {addr}")
+
+ notify_all(f"{name} присоединился к чату.", conn, color)
+
+ while True:
+ data = conn.recv(1024).decode('utf-8')
+ if not data:
+ break
+ notify_all(f"{name}: {data}", conn, color)
+
+ except Exception as err:
+ print(f"Ошибка с клиентом {addr}: {err}")
+ finally:
+ if conn in active_users:
+ left_user, clr = active_users[conn]
+ print(f"{left_user} вышел из чата.")
+ notify_all(f"{left_user} покинул чат.", conn, clr)
+ del active_users[conn]
+ conn.close()
+
+def notify_all(message, sender=None, color="#000000"):
+ for client in active_users:
+ if client != sender:
+ try:
+ packet = f"{color}:{active_users[client][0]}:{message}"
+ client.send(packet.encode('utf-8'))
+ except:
+ pass
+
+def run_server():
+ server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+ server.bind(("127.0.0.1", 9090))
+ server.listen()
+ print("Чат-сервер запущен на порту 9090")
+
+ while True:
+ conn, addr = server.accept()
+ threading.Thread(target=handle_connection, args=(conn, addr), daemon=True).start()
+
+if __name__ == "__main__":
+ run_server()
diff --git "a/works/\320\2323323/\320\237\320\265\321\202\321\200\320\276\320\262\320\260_\320\222\320\270\320\272\321\202\320\276\321\200\320\270\321\217/lab6/\320\236\321\202\321\207\320\265\321\202_\320\237\320\265\321\202\321\200\320\276\320\262\320\260_\320\222\320\270\320\272\321\202\320\276\321\200\320\270\321\217.odt" "b/works/\320\2323323/\320\237\320\265\321\202\321\200\320\276\320\262\320\260_\320\222\320\270\320\272\321\202\320\276\321\200\320\270\321\217/lab6/\320\236\321\202\321\207\320\265\321\202_\320\237\320\265\321\202\321\200\320\276\320\262\320\260_\320\222\320\270\320\272\321\202\320\276\321\200\320\270\321\217.odt"
new file mode 100644
index 000000000..5960f4ff5
Binary files /dev/null and "b/works/\320\2323323/\320\237\320\265\321\202\321\200\320\276\320\262\320\260_\320\222\320\270\320\272\321\202\320\276\321\200\320\270\321\217/lab6/\320\236\321\202\321\207\320\265\321\202_\320\237\320\265\321\202\321\200\320\276\320\262\320\260_\320\222\320\270\320\272\321\202\320\276\321\200\320\270\321\217.odt" differ