2017-02-16 44 views
-1

Мне нужно скопировать файлы на удаленный компьютер. Прежде чем я это сделаю, мне нужно проверить, доступен ли ПК. Я попытался использовать ACE_OS::stat(), чтобы проверить, существует ли каталог. На некоторых платформах у этого есть тайм-аут, которого было бы достаточно для меня, но на других платформах программа застревает.Как пинговать другой компьютер в той же локальной сети с помощью ACE?

ACE предлагает ACE_Ping_Socket, поэтому я предполагаю, что он делает то, что я хочу. Однако я не могу заставить его работать, даже с LOCALHOST. Кто-нибудь знает, как это сделать?

#include "ace/Ping_Socket.h" 
#include "ace/INET_Addr.h" 

int main(int argc, char * argv[]) 
{ 
    ACE_INET_Addr addr; 

    // instead of 127.0.0.1, insert IP of a remote PC 
    int i_set = addr.set("127.0.0.1:0"); 

    ACE_Ping_Socket s; 
    int i_open = s.open(addr); 

    // if open works, PC is reachable, at least this is the idea... 
    // i_set = 0, but i_open = -1, even for 127.0.0.1 
    return 0; 
} 

Я также открыт для альтернативы ACE :-)

ответ

0

следующие работы красиво. pacHost может быть IP-адресом (например, «127.0.0.1») или именем хоста (например, ACE_LOCALHOST).

static bool isReachable(unsigned int uiPort, const char * pacHost, unsigned int uiTimeOutSeconds) 
{ 
    ACE_INET_Addr srvr(uiPort, pacHost); 

    ACE_SOCK_Connector connector; 
    ACE_SOCK_Stream peer; 
    const ACE_Time_Value timeout (uiTimeOutSeconds); 

    if (-1 == connector.connect(peer, srvr, &timeout)) 
    { 
     return false; 
    } 

    peer.close(); 
    return true; 
} 

В моем случае порт составляет 445 для использования протокола SMB.