获取本机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是一个有计算机名的非法字串,串的开头有很多空字符,而且在串里面还有很多其他的字符,不知道大家有没有碰到这个问题,是怎么解决的?
...全文
81 点赞 收藏 7
写回复
7 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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
回复
相关推荐
发帖
网络编程
创建于2007-09-28

1.8w+

社区成员

VC/MFC 网络编程
申请成为版主
帖子事件
创建了帖子
2005-10-14 02:48
社区公告
暂无公告