Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions works/К3323/Петрова_Виктория/lab6/task1/client.py
Original file line number Diff line number Diff line change
@@ -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}")
16 changes: 16 additions & 0 deletions works/К3323/Петрова_Виктория/lab6/task1/server.py
Original file line number Diff line number Diff line change
@@ -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'))
19 changes: 19 additions & 0 deletions works/К3323/Петрова_Виктория/lab6/task2/client.py
Original file line number Diff line number Diff line change
@@ -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()
30 changes: 30 additions & 0 deletions works/К3323/Петрова_Виктория/lab6/task2/server.py
Original file line number Diff line number Diff line change
@@ -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()
12 changes: 12 additions & 0 deletions works/К3323/Петрова_Виктория/lab6/task3/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>HELLO</title>
</head>
<body>

<h1>HELLO WORLD</h1>

</body>
</html>
33 changes: 33 additions & 0 deletions works/К3323/Петрова_Виктория/lab6/task3/server.py
Original file line number Diff line number Diff line change
@@ -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()
69 changes: 69 additions & 0 deletions works/К3323/Петрова_Виктория/lab6/task4/chat.kv
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
#:kivy 2.3.0

<MessageBubble@BoxLayout>:
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

<Messenger>:
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)
81 changes: 81 additions & 0 deletions works/К3323/Петрова_Виктория/lab6/task4/client.py
Original file line number Diff line number Diff line change
@@ -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()
60 changes: 60 additions & 0 deletions works/К3323/Петрова_Виктория/lab6/task4/server.py
Original file line number Diff line number Diff line change
@@ -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()
Binary file not shown.