Я написал службу (C ++), которая работает на компьютере AIX и получает многоадресные сообщения от удаленного хоста (моя служба присоединяется к предопределенной группе многоадресной рассылки&пара портов).
В последнее время меня попросили обработать многоадресные сообщения, полученные от другого хоста (в другой многоадресной группе).&порт, на том же сокете. Хотя я могу настаивать на том же порте.
Проблема в том, что сообщения, полученные от каждого хоста, должны обрабатываться по-разному.
Как я могу различить эти сообщения? Есть ли возможность получить группу многоадресной рассылки отправителя?&пара портов из сокета / полученные сообщения?
В то время как вы можете идентифицировать адрес удаленного хоста (не многоадресной группы!) С помощью recvfrom (); Как правило, не рекомендуется выполнять различные действия для другого хоста с прослушиванием одного и того же порта. Это против правила наименьшего удивления.
Таким образом, краткий ответ заключается в разграничении адреса удаленного хоста.
Если вы хотите различать многоадресные группы на одном и том же порту, вам нужно связать несколько сокетов с адресом многоадресной группы.
Код выглядит так:
addr.set(239,0,0,1,8888);
udp.socket();
udp.joinmcast(&addr);
udp.bind(&addr);