Как написать UDP сервер работающий без Bind? Написал клиент и сервер для работы с UDP. Один посылает, другой принимает, тут всё ОК.
Но если я запускаю второй сервер (на том же ПК) и хочу чтобы клиент слал им обоим сообщения одновременно (это же широковещалка), то второе приложение-сервер ругается что нельзя биндить на один и тот же адрес.
Как сделать так, чтобы датаграммы приходили всем N запущенным серверам? Отказаться от Bind?

19 Ноя 2019 в 19:54
173 +1
0
Ответы
1

Для реализации UDP сервера, который будет принимать датаграммы без привязки к конкретному адресу, вы можете воспользоваться функцией socket.INADDR_ANY. Это позволит вашему серверу принимать датаграммы с любого адреса.

Пример кода:

import socket
UDP_IP = "0.0.0.0"
UDP_PORT = 5005
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind((UDP_IP, UDP_PORT))
while True:
data, addr = sock.recvfrom(1024)
print("Received message:", data.decode())

Этот код создаст UDP сервер, который будет принимать датаграммы с любого адреса на порту 5005. Вы можете запустить несколько таких серверов на одном компьютере и они будут все работать одновременно.

Пожалуйста, обратите внимание, что при использовании socket.INADDR_ANY ваш сервер будет принимать датаграммы с любого адреса, поэтому будьте осторожны при работе с данными из ненадежных источников.

19 Апр 2024 в 01:26
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир