获取本机ip时碰到的问题

level1979 2005-10-14 02:48:59
windows2003
我在使用gethostname的时候得不到本机计算机名,不过计算机的名字倒是在获得的字符数组里面,我的代码如下:
hostent* remoteHost;
char LocalName[256];
int error;
error=gethostname(LocalName, 256);
remoteHost = gethostbyname(LocalName);
这里的error返回是0,可是LocalName是一个有计算机名的非法字串,串的开头有很多空字符,而且在串里面还有很多其他的字符,不知道大家有没有碰到这个问题,是怎么解决的?
...全文
137 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
level1979 2005-10-17
  • 打赏
  • 举报
回复
to DF:顺序没错的,其实看了 nuaawenlin(飘人) 的提示后,问题就解决了,不过结帖老出错@_@.
我的函数是这样写的(不是全部代码,不过功能已经实现了):
bool CInfoMana::setAddr(int port)
{

// 获取本机名
hostent* remoteHost;
char LocalName[256];
int error;
error=gethostname(LocalName, 256);

// 获取本地 IP 地址
remoteHost = gethostbyname(LocalName);
hostent& he = *remoteHost;

sockaddr_in sa;
CString strIpAddress;
for (int nAdapter=0; he.h_addr_list[nAdapter]; nAdapter++)
{
memcpy ( &sa.sin_addr.s_addr, he.h_addr_list[nAdapter],he.h_length);

}
// 输出机器的IP地址.
char* pIP=inet_ntoa(sa.sin_addr);
CString s;
s.Format("%s",pIP);
strIpAddress=s;
..........
return true;
}
72193 2005-10-15
  • 打赏
  • 举报
回复
up
flinming 2005-10-15
  • 打赏
  • 举报
回复
CString LocalHostAddress()
{
char hostname[128];
char Address[20];
if (gethostname(hostname, sizeof(hostname)) != SOCKET_ERROR)
{
HOSTENT *Hostent;
Hostent = gethostbyname(hostname);
if (Hostent != NULL)
{
int j;
int i =0;
memset(Address, 0, sizeof(Address));
for (j=0; j<4; j++)
{
sprintf(Address, "%s%d.",Address, (unsigned int)((unsigned char*)Hostent->h_addr_list[i])[j]);
}
}
}
CString Ips = Address;
CString Re = Ips.Left(strlen(Ips)-1);
return Re;
}
df8327 2005-10-15
  • 打赏
  • 举报
回复
拜托大哥
你这两句顺序错了
error=gethostname(LocalName, 256);
remoteHost = gethostbyname(LocalName);
否则你就能得到error号了
此外
在调用gethostbyname之类的函数之前,必须调用wsastartup!
level1979 2005-10-14
  • 打赏
  • 举报
回复
.........
居然取到了
.........
icegirl914 2005-10-14
  • 打赏
  • 举报
回复
给你个函数:
LPSTR GetHostIpAddres(char *hostname)
{
int err;
char *IP, *Ptr;
struct hostent *thishost;
struct in_addr in;
WSADATA wsaData;

err = WSAStartup(MAKEWORD(2, 0), &wsaData);
if (err != 0)
{
return NULL;
}

if (hostname == NULL)
{
char MYName[80];
gethostname(MYName, 80);
thishost = gethostbyname(MYName);
}
else
thishost = gethostbyname(hostname);

memset((void *)&in, sizeof(in), 0);
in.s_addr = *((unsigned long *)thishost->h_addr_list[0]);
Ptr = inet_ntoa(in);
WSACleanup();

IP = new char[strlen(Ptr)+1];
strcpy(IP, Ptr);

return IP;
}


nuaawenlin 2005-10-14
  • 打赏
  • 举报
回复
看看remoteHost 返回是否为NULL

18,363

社区成员

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

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