test/chat_udp.py
2026-02-04 17:11:31 +03:00

50 lines
1.8 KiB
Python

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 <ip> <сообщение>
try:
_, target_ip, private_message = message.split(" ", 2)
sock.sendto(f"PM {username}: {private_message}".encode(), (target_ip, PORT))
except ValueError:
print("Неверный формат команды. Используйте: /pm <ip> <сообщение>")
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()