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))
  • Вопрос задан
  • 813 просмотров
Пригласить эксперта
Ответы на вопрос 1
leahch
@leahch
3D специалист. Dолго, Dорого, Dерьмово.
Так у вас UDP сокет, поэтому со стороны клиента нужно сделать тоже самое, что и со стороны сервера bind(), потом, как-то серверу передать порт, на котором клиент будет слушать ответ от сервера. Запустить поток, который будет обслуживать входящие сообщения от сервера. (Итого, два потока, один для посылки серверу, второй для ответов от сервера).
На стороне сервера использовать не recv() а data, addr = sock.recvfrom(128), получая сразу IP-адрес клиента. Вот эти адреса прихраниваете в массивчик, они и будут вашими клиентами.

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

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

Войти через центр авторизации
Похожие вопросы