2013-06-18 161 views
0

我對網絡編程非常陌生,很難理解其中的幾個。UDP廣播沒有收到

我有一個工作程序將消息發送到本地設備,讓它知道它的工作方式,如保持活着。現在我想更改爲廣播,以便可以在本地檢查其狀態。所以我改變了工作代碼下面喜歡看到夫妻在線樣本

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

後有什麼更多我需要添加到廣播..Please諮詢工作。我完整的程序如下。我也使用Wireshark的發現,但沒有發現任何UDP數據包時,我broadcast.But我能當我使用特定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

當您遇到錯誤時,請將其顯示出來。用'perror()',或者通過'strerror()'記錄它。沒有這個,調試只是一個猜測遊戲。 – EJP

回答