import socket import threading BROADCAST_IP = "255.255.255.255" PORT = 10000 BUFFER_SIZE = 1024 # Функция для отправки сообщений def send_messages(sock, username): while True: message = input() if message.startswith("/pm"): # Личное сообщение в формате /pm <сообщение> try: _, target_ip, private_message = message.split(" ", 2) sock.sendto(f"PM {username}: {private_message}".encode(), (target_ip, PORT)) except ValueError: print("Неверный формат команды. Используйте: /pm <сообщение>") else: # Отправка сообщения в общий чат sock.sendto(f"BC {username}: {message}".encode(), (BROADCAST_IP, PORT)) # Функция для приема сообщений def receive_messages(sock): while True: data, addr = sock.recvfrom(BUFFER_SIZE) message = data.decode() if addr[0] != socket.gethostbyname(socket.gethostname()): print(f"[{addr[0]}] {message}") # Настройка сокета sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) # Привязка к порту sock.bind(("", PORT)) # Имя пользователя username = input("Введите имя пользователя: ") # Запуск потоков для отправки и получения сообщений send_thread = threading.Thread(target=send_messages, args=(sock, username)) receive_thread = threading.Thread(target=receive_messages, args=(sock,)) send_thread.start() receive_thread.start() send_thread.join() receive_thread.join()