2017-02-16 3 views
-1

Ich muss Dateien auf einen Remote-PC kopieren. Bevor ich das mache, muss ich prüfen, ob der PC erreichbar ist. Ich habe versucht mit ACE_OS::stat() zu überprüfen, ob ein Verzeichnis existiert. Auf einigen Plattformen hat dies eine Zeitüberschreitung, die für mich ausreichend wäre, aber auf anderen Plattformen bleibt das Programm hängen.Wie ping einen anderen PC im selben lokalen Netzwerk mit ACE?

ACE bietet die ACE_Ping_Socket, also nehme ich an, dass es tut was ich will. Aber ich kann es nicht schaffen, nicht einmal mit LOCALHOST. Weiß jemand, wie man das macht?

#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; 
} 

Ich bin auch offen für Alternativen :-) ACE

Antwort

0

Folgende Arbeiten gut. pacHost kann eine IP-Adresse (z. B. "127.0.0.1") oder ein Hostname (z. B. ACE_LOCALHOST) sein.

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; 
} 

In meinem Fall ist der Port 445 für die Verwendung des SMB-Protokolls.

Verwandte Themen