好难过啊。谁帮我分析下我写的代码。
#include #include
int main()
{
char buff[255];
WSAData wsaData;
WSAStartup(MAKEWORD(2, 2), &wsaData);
hostent * hostaddr,*tmp;
gethostname(buff, sizeof(buff));
hostaddr=gethostbyname(buff);
printf("Host name is: %s\n", buff);
printf("ip:%s\n",inet_ntoa(*(struct in_addr *)hostaddr->h_addr));
while (1)
{ tmp = gethostbyname(buff);
if (inet_ntoa(*(struct in_addr *)hostaddr->h_addr) == inet_ntoa(*(struct in_addr *)tmp->h_addr))
printf("ip 未改变:%s\n",inet_ntoa(*(struct in_addr *)tmp->h_addr));
else
printf("ip 改变为:%s\n",inet_ntoa(*(struct in_addr *)tmp->h_addr));
Sleep(3000);
}
WSACleanup();
return 0;
}
//本机ip:192.168.0.1
//运行本程序后 我把本机ip改为 192.168.0.2 后显示 "ip未改变:192.168.0.2"
ip都改变了 if判断怎么还是等于啊
//有什么好的方法比较 两次gethostbyname(buff); 获得的地址差异。
我把 上面代码 修改为 printf("ip 未改变:%s %d %d\n",inet_ntoa(*(struct in_addr *)tmp->h_addr),hostaddr,hostaddr);
发现hostaddr和tmp 地址是一样的。 这是为什么呢 ??我不是从新运行了 tmp = gethostbyname(buff);了吗?
我又把上面的 代码替换了
if (strcmp(inet_ntoa(*(struct in_addr *)hostaddr->h_addr),inet_ntoa(*(struct in_addr *)tmp->h_addr))==0) 来做判断,
单卧运行后 更改ip后 为什么还是打印 "ip未改变:192.168.0.2"
准备提交了突然看到自己没分了。如果我有一千万分我就会给你们每个回复我的人一万分,我有吗?没有
所以了 抱歉 请大家帮帮我