UDP Broadcast не получен

Я очень новичок в сетевом программировании, и мне трудно понять некоторые из них.

У меня есть работающая программа, которая отправляет сообщения на локальное устройство, чтобы оно знало, что оно работает, как Keep alive. Теперь я хочу перейти на трансляцию, чтобы можно было проверить ее статус в любом месте. Поэтому я изменил рабочий код, как показано ниже, после просмотра нескольких онлайн-примеров.

//inet_aton(pIPAddress, &(TxAddr.sin_addr)); //working
TxAddr.sin_addr.s_addr = htonl(INADDR_BROADCAST); //NOT WORKING

Есть ли что-то еще, что мне нужно добавить для работы для трансляции .. Пожалуйста, совет. Моя полная программа может быть найдена ниже. Я также использовал wireshark, но не нашел пакет UDP, когда я транслирую. Но я могу, когда я использую определенный IP ..

/// Rx buffer size
static int RxBufSize = UDP_RX_BUF_SIZE;

int Udp::UDPInit (tConfigIniData *pConfig)
{

pIPAddress = pConfig->pIPAddress;
TxPort = pConfig->UdpTxPort;

// Tx socket
TxSkt = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if (TxSkt == -1)
{
goto Exit;
}
else
{
Log (EVENT|TEXTFILE, UDP, "Successful tx socket creation\n");
}

Exit:
Log (EVENT|TEXTFILE, UDP, "() = %d\n", TxSkt);

return TxSkt;
}

int Udp::UDPSend (tUdpInfo _udpInfo)
{
int Ret = 0;

struct sockaddr_in TxAddr = {0};
TxAddr.sin_family = AF_INET;

TxAddr.sin_port   = htons(TxPort);
//TxAddr.sin_addr.s_addr = htonl(INADDR_BROADCAST);
inet_aton(pIPAddress, &(TxAddr.sin_addr)); //working

// And send
if (TxSkt != -1)
{
Log (EVENT|TEXTFILE, UDP, "Sending %d bytes: %p\n", sizeof(_udpInfo), &_udpInfo);

ssize_t Res = sendto(TxSkt, (const void*)(&_udpInfo), sizeof(_udpInfo), 0, (const struct sockaddr *)&TxAddr, sizeof(TxAddr));
if (Res < 0)
{
Log (EVENT|TEXTFILE|ERROR|CONSOLE, UDP,"ERR: Failed to write to TX socket (%d,%s)\n", errno, strerror(errno));
}
Ret = 0;
}
else
{
// No socket, indicate error
Log (EVENT|TEXTFILE|ERROR|CONSOLE, UDP, "ERR: No Tx Socket exists\n");
Ret = -EBADFD;
}

Log (EVENT|TEXTFILE, UDP, "()\n");
// TxPortumber++;
// cout<< "port NUmber used : "<<TxPortumber<<"\n";

return Ret;
}

void Udp::UDPDeinit (int UDPFd)
{
Log (EVENT|TEXTFILE, UDP, "(UDPFd %d)\n", UDPFd);

// tidy up interfaces
int Res = close(UDPFd);
if (Res < 0)
{
Log (EVENT|TEXTFILE|ERROR|CONSOLE, UDP, "UDP: Close Failed: %d, %s - %s\n", errno, strerror(errno), __func__);
}
}

0

Решение

Подсказка, setsockopt SO_BROADCAST, также поиск так.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]