如何通过IP获得局域网内的电脑名?

zhouyong0371 2003-05-29 01:07:43
我想通过已知的电脑IP获得局域网内的电脑名,如何实现,请给出源代码。也就是如何使用gethostbyaddr?
...全文
110 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
NewFree 2003-05-29
  • 打赏
  • 举报
回复
tserpent(Tang)的方法是很正确的,否则按ifromheaven(天堂鸟) 的简化版本会出现很多问题的,例如空指针等,所以应加判断的!

但tserpent(Tang)有点笔误:
if(!lpHostEnt)
str=(CString)lpHostEnt->h_name;
else
str="Unknown address";
应改为
if(lpHostEnt)
str=(CString)lpHostEnt->h_name;
else
str="Unknown address";

c0der 2003-05-29
  • 打赏
  • 举报
回复
gethostbyaddr
ifromheaven 2003-05-29
  • 打赏
  • 举报
回复
哪里用得着这么麻烦,不过gethostbyaddr用起来是不爽,先要用一个HOSTENT结构体接收返回值,
然后再从结构体中取出机器名。我给你写了个外包函数,进去是CString,出来还是CString很方便:
LPSTR CxxxDlg::GetHostName(CString IPaddr)
{
LPSTR Name;
HOSTENT *pHe;
unsigned long addr;
addr=inet_addr(IPaddr);
pHe=gethostbyaddr((char *)&addr,4,AF_INET);
Name=pHe->h_name;
return Name;

}
fhbkyo 2003-05-29
  • 打赏
  • 举报
回复
直接调用系统的ping不就行了??
ping -a IP
tserpent 2003-05-29
  • 打赏
  • 举报
回复
#include <windows.h>
#include <winsock.h>
CString GetAddrFromIp(CString ip)
{
WSADATA wsaData;
LPHOSTENT lpHostEnt=NULL;
DWORD dwIPAddr;
CString str="Unknown address";

if(WSAStartup(WINSOCK_VERSION,&wsaData))
AfxMessageBox("Could not get IP of computer!");
else
{
dwIPAddr=inet_addr(ip);
if(dwIPAddr==INADDR_NONE)
AfxMessageBox("f");
else
{
lpHostEnt=gethostbyaddr((LPSTR)&dwIPAddr,
PF_INET_LENGTH,
PF_INET);

if(!lpHostEnt)
str=(CString)lpHostEnt->h_name;
else
str="Unknown address";
}
}
WSACleanup();
return str;
}

void main()
{
CString str;
GetAddrFromIp(str);
}

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧