首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

求局域网内用ip地址获取计算机名称方法?解决思路

2013-01-25 
求局域网内用ip地址获取计算机名称方法?求代码。局域网内用IP地址(ip已知)获取计算机名称方法?[解决办法]用

求局域网内用ip地址获取计算机名称方法?
求代码。
局域网内用IP地址(ip已知)获取计算机名称方法?

[解决办法]
用WinSock2 API函数getnameinfo
int WSAAPI getnameinfo(
  __in   const struct sockaddr FAR *sa,
  __in   socklen_t salen,
  __out  char FAR *host,
  __in   DWORD hostlen,
  __out  char FAR *serv,
  __in   DWORD servlen,
  __in   int flags
);
MSDN里的例子:
    //-----------------------------------------
    // Call getnameinfo
    dwRetval = getnameinfo((struct sockaddr *) &saGNI,
                           sizeof (struct sockaddr),
                           hostname,
                           NI_MAXHOST, servInfo, 
                           NI_MAXSERV, NI_NUMERICSERV);

    if (dwRetval != 0) {
        printf("getnameinfo failed with error # %ld\n", 
            WSAGetLastError());    
    } else {
        printf("getnameinfo returned hostname = %s\n", hostname);
    }


[解决办法]

//用这个函数就可以了! 
AnsiString   __fastcall   TForm1::GetComputerNameByAddr   (   AnsiString   IP   ) 

    hostent   *   ClientHost; 
    DWORD   InetAddr   =   inet_addr   (   IP.c_str()   ); 
    ClientHost   =   gethostbyaddr   (   (char*)&InetAddr,   IP.Length(),   PF_INET   ); 
    return   ClientHost-> h_name; 
}

[解决办法]
找到了妖哥很久前写的例子
void __fastcall TForm1::Button2Click(TObject *Sender)
{
        WORD   wVersionRequested;
        WSADATA   wsaData;
        int   err;

        wVersionRequested   =   MAKEWORD(   2,   0   );
        err=WSAStartup(wVersionRequested,&wsaData   );
        if(err!=0)


        {
                WSACleanup();
                return;
        } 

        String   strIPAddr   =   "127.0.0.1 ";
        struct   hostent   *hostname; 
        unsigned   int   addr;
        addr   =   inet_addr((char   FAR*)(strIPAddr.c_str())); 
        hostname=gethostbyaddr((char   *)&addr,4,AF_INET);
        if(hostname)
                ShowMessage(hostname-> h_name);
        WSACleanup();

}


[解决办法]
用Winsock提供的功能足矣完成需求。

记的#include <winsock.h>或#include <winsock2.h>

热点排行