如何使用ACE ping同一本地网络中的另一台PC?

时间:2017-02-16 08:42:52

标签: c++ ping ace

我需要将文件复制到远程PC。在我这样做之前,我需要检查一下PC是否可以访问。我尝试使用ACE_OS::stat()来检查目录是否存在。在某些平台上,这有一个超时,这对我来说已经足够了,但在其他平台上,程序会被卡住。

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的替代方案: - )

1 个答案:

答案 0 :(得分: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。