Необходимо по udp multicast передать данные. Мне дали дали групповой IP и порт. С помощью гула накидал следующее:
struct in_addr localInterface;
struct sockaddr_in localSock, groupSock;
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
//---- Биндим докальный адрес и порт
memset((char *) &localSock, 0, sizeof(localSock));
localSock.sin_family = AF_INET;
localSock.sin_port = htons(6400); // номер моего порта
if (sourceAddress.isEmpty())
localSock.sin_addr.s_addr = INADDR_ANY;
else
localSock.sin_addr.s_addr = inet_addr(sourceAddress.toStdString().c_str());
bind(sockfd, (struct sockaddr*)&localSock, sizeof(localSock))
// ---------- Устанавливаю групповые адрес и порт приемника, которые мне выдали
memset((char *) &groupSock, 0, sizeof(groupSock));
groupSock.sin_family = AF_INET;
groupSock.sin_addr.s_addr = inet_addr("224.211.1.9");
groupSock.sin_port = htons(6490);
// ---------- Устанавливаю локальный интерфейс для передачи multicast datagrams
if (sourceAddress.isEmpty())
localInterface.s_addr = INADDR_ANY;
else
localInterface.s_addr = inet_addr(sourceAddress.toStdString().c_str());
if(setsockopt(sockfd, IPPROTO_IP, IP_MULTICAST_IF, (char *)&localInterface, sizeof(localInterface)) < 0)
// -------------- Выдаю данные
int n = sendto(sockfd, datagram, size, 0, (struct sockaddr*)&groupSock, sizeof(groupSock))
Здесь, все проверки опустил. Все команды выполняются успешно. А sendto выдает n, равное реальному количеству переданных байт. Но приемник данные не принимает ( Подскажите, кто разбирается, из-за чего данные могут не приниматься (не доходить) ? Чего еще в передатчике не хватает ?, флаги может какие ? Приемник точно рабочий - данные на него выдают, но код передатчика мне не доступен.