读书人

求局域网内用ip地址获取计算机姓名方法

发布时间: 2012-09-28 00:03:35 作者: rapoo

求局域网内用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);
}


[解决办法]

C/C++ code
//用这个函数就可以了! 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; }
[解决办法]
找到了妖哥很久前写的例子
C/C++ code
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>

读书人网 >C++ Builder

热点推荐