2017-02-16 76 views
-1

我需要將文件複製到遠程PC。在我這樣做之前,我需要檢查PC是否可到達。我試着用ACE_OS::stat()來檢查一個目錄是否存在。在某些平臺上,這有一個超時,這對我來說已經足夠了,但在其他平臺上,程序會卡住。如何使用ACE在同一本地網絡中ping另一臺PC?

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

在我的情況下,使用SMB協議的端口是445。

相關問題