用C语言编程显示主机IP地址!
要能运行的,谁能够编出来?????最好用API函数编写上面给出的程序我都不太清楚怎么运行因为我不太会用VC6.0最好能给我详细点的步骤!...
要能运行的 ,谁能够编出来?????
最好用API函数编写 上面给出的程序 我都不太清楚怎么运行 因为我不太会用VC6.0 最好能给我详细点的步骤! 展开
最好用API函数编写 上面给出的程序 我都不太清楚怎么运行 因为我不太会用VC6.0 最好能给我详细点的步骤! 展开
5个回答
展开全部
Is_it:谢了,是你说的这样,下面的代码我改了,可以建立一个普通的工程或空程就行,但要加入相应的库ws2_32.lib,分千万别给我
还有,bchshr,你定义的是指针都没有初始化就用,行不行啊
bchshr:
问你一下,你的程序的确可以输出机器名和IP地址,但为什么我刚才也是用的和你相同的方法建立的一个空工程或者建立一个控制台应用程序,输入下面的语句不能达到目的了,搞了半天了,郁闷
#include <stdio.h>
#include <Winsock2.h>
int main()
{
int WSA_return;
WSADATA WSAData;
struct hostent aa;
struct hostent *host_entry=&aa;
char host_addr[256]={0};
char host_address[256]={0};
WORD temp=0x0101;
WSA_return=WSAStartup(temp,&WSAData);
gethostname(host_addr,256);
printf("webhost:%s\n",host_addr);
host_entry=gethostbyname(host_addr);
if(host_entry)
sprintf(host_address,"%d.%d.%d.%d",
(host_entry->h_addr_list[0][0]&0x00ff),
(host_entry->h_addr_list[0][1]&0x00ff),
(host_entry->h_addr_list[0][2]&0x00ff),
(host_entry->h_addr_list[0][3]&0x00ff));
printf("%s\n",host_address);
return 0;
}
还有,bchshr,你定义的是指针都没有初始化就用,行不行啊
bchshr:
问你一下,你的程序的确可以输出机器名和IP地址,但为什么我刚才也是用的和你相同的方法建立的一个空工程或者建立一个控制台应用程序,输入下面的语句不能达到目的了,搞了半天了,郁闷
#include <stdio.h>
#include <Winsock2.h>
int main()
{
int WSA_return;
WSADATA WSAData;
struct hostent aa;
struct hostent *host_entry=&aa;
char host_addr[256]={0};
char host_address[256]={0};
WORD temp=0x0101;
WSA_return=WSAStartup(temp,&WSAData);
gethostname(host_addr,256);
printf("webhost:%s\n",host_addr);
host_entry=gethostbyname(host_addr);
if(host_entry)
sprintf(host_address,"%d.%d.%d.%d",
(host_entry->h_addr_list[0][0]&0x00ff),
(host_entry->h_addr_list[0][1]&0x00ff),
(host_entry->h_addr_list[0][2]&0x00ff),
(host_entry->h_addr_list[0][3]&0x00ff));
printf("%s\n",host_address);
return 0;
}
Storm代理
2023-08-29 广告
2023-08-29 广告
"StormProxies是全球大数据IP资源服务商,其住宅代理网络由真实的家庭住宅IP组成,可为企业或个人提供满足各种场景的代理产品。点击免费测试(注册即送1G流量)StormProxies有哪些优势?1、IP+端口提取形式,不限带宽,I...
点击进入详情页
本回答由Storm代理提供
展开全部
最简单的方法是用 ipconfig
为了把数取出来,放到程序里好使用,可以把 ipconfig内容 存入C:\\TEMP\\tmp.ip, 再取出来用。
下面程序运行完,IP 的 4 段 整数 存在 d1,d2,d3,d4 里。
#include <stdio.h>
void main()
{
FILE *fin;
char namein[]="C:\\TEMP\\tmp.ip";
char str1[64],str2[64];
char one_line[80];
char cmd[120];
int i,j,k;
int d1,d2,d3,d4;
sprintf(cmd,"ipconfig > %s",namein);
system(cmd);
fin = fopen(namein,"r");
while ( fgets(&one_line[0],80,fin) !=NULL ){
j = sscanf(one_line,"%s %s",&str1[0],&str2[0]);
if (j == 2 && strncmp(str2,"Address",7) ==0 ) {
for (i=1;i<50;i++) if (one_line[i] ==':') k = i;
break;
};
};
fclose(fin);
sscanf(&one_line[0]+k+1,"%d.%d.%d.%d", &d1,&d2,&d3,&d4);
printf("%d %d %d %d\n",d1,d2,d3,d4);
exit(0);
}
为了把数取出来,放到程序里好使用,可以把 ipconfig内容 存入C:\\TEMP\\tmp.ip, 再取出来用。
下面程序运行完,IP 的 4 段 整数 存在 d1,d2,d3,d4 里。
#include <stdio.h>
void main()
{
FILE *fin;
char namein[]="C:\\TEMP\\tmp.ip";
char str1[64],str2[64];
char one_line[80];
char cmd[120];
int i,j,k;
int d1,d2,d3,d4;
sprintf(cmd,"ipconfig > %s",namein);
system(cmd);
fin = fopen(namein,"r");
while ( fgets(&one_line[0],80,fin) !=NULL ){
j = sscanf(one_line,"%s %s",&str1[0],&str2[0]);
if (j == 2 && strncmp(str2,"Address",7) ==0 ) {
for (i=1;i<50;i++) if (one_line[i] ==':') k = i;
break;
};
};
fclose(fin);
sscanf(&one_line[0]+k+1,"%d.%d.%d.%d", &d1,&d2,&d3,&d4);
printf("%d %d %d %d\n",d1,d2,d3,d4);
exit(0);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
PcrazyC - 高级经理 六级
的代码少调用了WSAStartup,没有对库进行初始化所以不会成功的.只要加上就没问题的了...BCHSHR说的库也要加进去才行...在CONSOLE模式和APPLICATION模式其实都是可以的...
的代码少调用了WSAStartup,没有对库进行初始化所以不会成功的.只要加上就没问题的了...BCHSHR说的库也要加进去才行...在CONSOLE模式和APPLICATION模式其实都是可以的...
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
强悍。。
最简单的写法
#include"dos.h"
main()
{system("ipconfig");
}
最简单的写法
#include"dos.h"
main()
{system("ipconfig");
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
程序如下所示:完全满足你的要求
#include<winsock.h>
int WSA_return;
WSADATA WSAData;
HOSTENT *host_entry;
char host_name[256];
char host_address[256];
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
WORD temp=0x0101;
WSA_return=WSAStartup(temp,&WSAData);
if(WSA_return==0)
{
gethostname(host_name,256);
host_entry=gethostbyname(host_name);
if(host_entry!=0)
{
wsprintf(host_address,"%d.%d.%d.%d",
(host_entry->h_addr_list[0][0]&0x00ff),
(host_entry->h_addr_list[0][1]&0x00ff),
(host_entry->h_addr_list[0][2]&0x00ff),
(host_entry->h_addr_list[0][3]&0x00ff));
MessageBox(NULL,host_address,host_name,MB_OK);
}
}
WSACleanup();
return 0;
}
但是需要注意:用Visual C++6.0编译Windows C程序,使用Winsock API函数时,首先要把wsock32.lib添加到它的库模块中,否刚在链接的时候,会出现“error LNK2001”错误。添加wsock32.lib的具体步骤是:打开工程菜单,选择设置,在弹出的Project settings对话框中,点击link选项卡,然后在对象/库模块文本框中添加wsock32.lib。
我用的是win32模式,而不是win32 console application模式,原因是winsock中的函数是以win API为基础的。其中的主函数是WinMain()
#include<winsock.h>
int WSA_return;
WSADATA WSAData;
HOSTENT *host_entry;
char host_name[256];
char host_address[256];
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
WORD temp=0x0101;
WSA_return=WSAStartup(temp,&WSAData);
if(WSA_return==0)
{
gethostname(host_name,256);
host_entry=gethostbyname(host_name);
if(host_entry!=0)
{
wsprintf(host_address,"%d.%d.%d.%d",
(host_entry->h_addr_list[0][0]&0x00ff),
(host_entry->h_addr_list[0][1]&0x00ff),
(host_entry->h_addr_list[0][2]&0x00ff),
(host_entry->h_addr_list[0][3]&0x00ff));
MessageBox(NULL,host_address,host_name,MB_OK);
}
}
WSACleanup();
return 0;
}
但是需要注意:用Visual C++6.0编译Windows C程序,使用Winsock API函数时,首先要把wsock32.lib添加到它的库模块中,否刚在链接的时候,会出现“error LNK2001”错误。添加wsock32.lib的具体步骤是:打开工程菜单,选择设置,在弹出的Project settings对话框中,点击link选项卡,然后在对象/库模块文本框中添加wsock32.lib。
我用的是win32模式,而不是win32 console application模式,原因是winsock中的函数是以win API为基础的。其中的主函数是WinMain()
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |