2016-02-26 116 views
1

我知道远程机器的名称,这台机器是在同一个网络上。从机器名称查找机器IP地址

如果我从命令提示符ping那台机器,我也会得到IP信息。

C:\Users\anikumar>ping neemqx01g 

Pinging neemqx01g.efi.internal [10.210.98.194] with 32 bytes of data: 
Reply from 10.210.98.194: bytes=32 time=2ms TTL=128 
Reply from 10.210.98.194: bytes=32 time<1ms TTL=128 
Reply from 10.210.98.194: bytes=32 time<1ms TTL=128 
Reply from 10.210.98.194: bytes=32 time<1ms TTL=128 

Ping statistics for 10.210.98.194: 
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), 
Approximate round trip times in milli-seconds: 
    Minimum = 0ms, Maximum = 2ms, Average = 0ms 

如何在wxWidgets中以编程方式实现或获取IP地址?

答案:

C函数:

const wxString GetIPbyName(const wxString& name) 
{ 
    struct hostent* pHostInfo; 
    pHostInfo = gethostbyname(name.c_str()); 

    in_addr * address = (in_addr *)pHostInfo->h_addr; 
    std::string ip_address = inet_ntoa(*address); 

    return ip_address; 
} 

wxWidgets的:

wxIPV4address ipv4; 
    ipv4.Hostname(m_currentServer); 
    wxString m_currentServer = ipv4.IPAddress(); 

我不是如何在多个活动网卡的情况下行为。

+1

见http://stackoverflow.com/questions/5486113/boost-asio-how-to-turn-url-into-ip-adress –

+0

@YamMarcovic:该OP不问的URI,也无法左右升压.ASIO。 –

+0

我投票结束作为资源请求。 – NathanOliver

回答

2

我已经通过文档查看了您,并且您不能

对于便携式网络名称查找,可以考虑使用通用跨平台联网库,例如Boost.ASIO

+0

请问您可以发布一段代码片段。 – Anil8753

+0

@ Anil8753:No. –

+0

咦? “我怎样才能做到这一点?” - >“不,不。” ??? – immibis

1

C套接字库(几乎)是可移植的。您将有旧的gethostbyaddr呼叫或较新的getaddrinfo之一。

但你会需要一些#ifdef让他们忠实地移动,因为:

  • 头是不一样的netdb.h(和optionaly SYS/types.h中和sys/socket.h中)POSIX的系统和Ws2tcpip.h上并在Windows上使用winsock2.h在窗口上使用
  • ,您需要致电WSAStartup来初始化winsock。
+0

这就是为什么我们让经过测试的,广泛使用的库为我们做的。 –