Задать вопрос
phobious
@phobious
Не отрицаю свою глупость, и нет, мне не стыдно

Как отправить сообщение всем подключенным клиентам?

Как отправить сообщение всем подключенным клиентам, после того, как я его получил на сервер?

код сервера :

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
s.bind(('0.0.0.0',3535))

print('[ Start Server ]')

while True:
    message = s.recv(128).decode()               
    print(message)


код клиента :

import socket


sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)

while True:
    msg = input('введите текст сообщения : ')
     sock.sendto(msg.encode(), ('0.0.0.0',3535))
  • Вопрос задан
  • 940 просмотров
Подписаться 1 Простой 1 комментарий
Пригласить эксперта
Ответы на вопрос 1
leahch
@leahch
3D специалист. Dолго, Dорого, Dерьмово.
Так у вас UDP сокет, поэтому со стороны клиента нужно сделать тоже самое, что и со стороны сервера bind(), потом, как-то серверу передать порт, на котором клиент будет слушать ответ от сервера. Запустить поток, который будет обслуживать входящие сообщения от сервера. (Итого, два потока, один для посылки серверу, второй для ответов от сервера).
На стороне сервера использовать не recv() а data, addr = sock.recvfrom(128), получая сразу IP-адрес клиента. Вот эти адреса прихраниваете в массивчик, они и будут вашими клиентами.

Можно изобрести свой протокол хендшейка, где первое сообщение будет порт (и чего нибудь служебное, типа public-ключа), на котором слушает клиент (конечно порт клиента можно забить в код навечно).
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы