200分求一段代码,用C++获取本机IP地址

如题回答需要完全,就是说我复制粘贴运行就好了那啥,需要包含完整的头文件,构造函数,MAIN函数,如果有宏定义的也需要宏定义哦C++的那啥,高手拜托了,我改的郁闷了整数就好... 如题
回答需要完全,就是说我复制粘贴运行就好了

那啥,需要包含完整的头文件,构造函数,MAIN函数,如果有宏定义的也需要宏定义哦

C++的

那啥,高手拜托了,我改的郁闷了
整数就好
展开
 我来答
归彤霞04A
2009-04-25 · 超过15用户采纳过TA的回答
知道答主
回答量:58
采纳率:0%
帮助的人:43.5万
展开全部
#include<stdio.h>
#include<winsock2.h>
#pragma comment(lib,"ws2_32.lib")
void CheckIP(void) //定义CheckIP()函数,用于获取本机IP地址
{
WSADATA wsaData;
char name[255];//定义用于存放获得的主机名的变量
char *ip;//定义IP地址变量
PHOSTENT hostinfo;

//调用MAKEWORD()获得Winsock版本的正确值,用于加载Winsock库
if ( WSAStartup( MAKEWORD(2,0), &wsaData ) == 0 ) {
//现在是加载Winsock库,如果WSAStartup()函数返回值为0,说明加载成功,程序可以继续
if( gethostname ( name, sizeof(name)) == 0) {
//如果成功地将本地主机名存放入由name参数指定的缓冲区中
if((hostinfo = gethostbyname(name)) != NULL) {
//这是获取主机名,如果获得主机名成功的话,将返回一个指针,指向hostinfo,hostinfo
//为PHOSTENT型的变量,下面即将用到这个结构体
ip = inet_ntoa (*(struct in_addr *)*hostinfo->h_addr_list);
//调用inet_ntoa()函数,将hostinfo结构变量中的h_addr_list转化为标准的点分表示的IP
//地址(如192.168.0.1)
printf("%s\n",ip);//输出IP地址
}
}
WSACleanup( );//卸载Winsock库,并释放所有资源
} }

int main(void)
{
CheckIP();
return 0;
}
我写了很久的哦
Storm代理
2023-07-25 广告
StormProxies是一家提供动态代理服务器服务的企业,旨在帮助用户更好地管理网络访问和安全。以下是一些关于StormProxies的IP动态代理服务的特点:1. 高匿名性:StormProxies的动态代理服务器具有高匿名性,可以有效... 点击进入详情页
本回答由Storm代理提供
d2105ljl
2009-04-27
知道答主
回答量:20
采纳率:0%
帮助的人:5.8万
展开全部
#include <stdio.h>
#include <winsock2.h>
#pragma comment(lib,"ws2_32.lib")
int doit(int, char **)
{
char host_name[255];
//获取本地主机名称
if (gethostname(host_name, sizeof(host_name)) == SOCKET_ERROR) {
printf("Error %d when getting local host name.n", WSAGetLastError());
return 1;
}
printf("Host name is: %s\n", host_name);
//从主机名数据库中得到对应的“主机”
struct hostent *phe = gethostbyname(host_name);
if (phe == 0) {
printf("Yow! Bad host lookup.");
return 1;
}
//循环得出本地机器所有IP地址
for (int i = 0; phe->h_addr_list[i] != 0; ++i) {
struct in_addr addr;
memcpy(&addr, phe->h_addr_list[i], sizeof(struct in_addr));
printf("Address %d : %s\n" , i, inet_ntoa(addr));
}
return 0;
}
int main(int argc, char *argv[])
{
WSAData wsaData;
if (WSAStartup(MAKEWORD(1, 1), &wsaData) != 0)
{
system("pause");
return 255;
}
int retval = doit(argc, argv);
WSACleanup();
system("pause");
return retval;
}

再不会就问我
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
何处淬吴钩
2009-04-25 · TA获得超过5045个赞
知道大有可为答主
回答量:2947
采纳率:50%
帮助的人:2408万
展开全部
你说的不明确。获取的ip地址要以怎样的格式提供给你?是字符串(假设ip地址是192.168.0.1)"192.168.0.1",还是四个整数192,168,0,1?

下面的程序是我粘贴的,把错误修正了一下,经我测试,能显示主机名和ip。ip是以char字符串形式存在的。需要整数的话,自己对字符串处理一下吧。
/* 编译环境: visual c++ */
#include <stdio.h>
#include <winsock2.h>
#pragma comment(lib,"ws2_32.lib")
int doit(int, char **)
{
char host_name[255];
//获取本地主机名称
if (gethostname(host_name, sizeof(host_name)) == SOCKET_ERROR) {
printf("Error %d when getting local host name.n", WSAGetLastError());
return 1;
}
printf("Host name is: %s\n", host_name);
//从主机名数据库中得到对应的“主机”
struct hostent *phe = gethostbyname(host_name);
if (phe == 0) {
printf("Yow! Bad host lookup.");
return 1;
}
//循环得出本地机器所有IP地址
for (int i = 0; phe->h_addr_list[i] != 0; ++i) {
struct in_addr addr;
memcpy(&addr, phe->h_addr_list[i], sizeof(struct in_addr));
printf("Address %d : %s\n" , i, inet_ntoa(addr));
}
return 0;
}
int main(int argc, char *argv[])
{
WSAData wsaData;
if (WSAStartup(MAKEWORD(1, 1), &wsaData) != 0)
{
system("pause");
return 255;
}
int retval = doit(argc, argv);
WSACleanup();
system("pause");
return retval;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
我是dongping
2009-04-25 · TA获得超过644个赞
知道小有建树答主
回答量:478
采纳率:0%
帮助的人:239万
展开全部
使用DOS命令:ipconfig >a.txt
然后在这个目录中读取文件a.txt就可以了。
具体是这么使用的:

system("ipconfig >a.txt");

以后就使用普通的文件读取方法,在a.txt中寻找特定的IP地址字符串。需要相应的头文件。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
syzh120
2009-04-25 · 超过47用户采纳过TA的回答
知道答主
回答量:193
采纳率:0%
帮助的人:167万
展开全部
#include <winsock.h>
#include <wsipx.h>
#include <wsnwlink.h>
#include <stdio.h>

int main()
{
WORD wVersionRequested = MAKEWORD(1, 1);
WSADATA wsaData;
if (WSAStartup(wVersionRequested, &wsaData)) {
printf("WSAStartup failed %s\n", WSAGetLastError());
return -1;
}
char hostname[256];
int res = gethostname(hostname, sizeof(hostname));
if (res != 0) {
printf("Error: %u\n", WSAGetLastError());
return -1;
}
printf("hostname=%s\n", hostname);
hostent* pHostent = gethostbyname(hostname);
if (pHostent==NULL) {
printf("Error: %u\n", WSAGetLastError());
return -1;
}
hostent& he = *pHostent;
printf("name=%s\naliases=%s\naddrtype=%d\nlength=%d\n",
he.h_name, he.h_aliases, he.h_addrtype, he.h_length);

sockaddr_in sa;
for (int nAdapter=0; he.h_addr_list[nAdapter]; nAdapter++) {
memcpy ( &sa.sin_addr.s_addr, he.h_addr_list[nAdapter],he.h_length);
printf("Address: %s\n", inet_ntoa(sa.sin_addr)); // 显示地址串
}
WSACleanup();
return 0;
}
要添加库Ws2_32.lib 不明白的请HI我
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式