200分求一段代码,用C++获取本机IP地址
如题回答需要完全,就是说我复制粘贴运行就好了那啥,需要包含完整的头文件,构造函数,MAIN函数,如果有宏定义的也需要宏定义哦C++的那啥,高手拜托了,我改的郁闷了整数就好...
如题
回答需要完全,就是说我复制粘贴运行就好了
那啥,需要包含完整的头文件,构造函数,MAIN函数,如果有宏定义的也需要宏定义哦
C++的
那啥,高手拜托了,我改的郁闷了
整数就好 展开
回答需要完全,就是说我复制粘贴运行就好了
那啥,需要包含完整的头文件,构造函数,MAIN函数,如果有宏定义的也需要宏定义哦
C++的
那啥,高手拜托了,我改的郁闷了
整数就好 展开
7个回答
展开全部
#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;
}
我写了很久的哦
#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 广告
2023-07-25 广告
StormProxies是一家国内优质海外HTTP代理商,拥有一个庞大的IP资源池,覆盖200多个地区,IP数量大且匿名度高。其优点还包括超高并发、稳定高效、技术服务等特点,同时提供HTTP、HTTPS以及SOCKS5协议支持。此外,Sto...
点击进入详情页
本回答由Storm代理提供
展开全部
#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;
}
再不会就问我
#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;
}
再不会就问我
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你说的不明确。获取的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;
}
下面的程序是我粘贴的,把错误修正了一下,经我测试,能显示主机名和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;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
使用DOS命令:ipconfig >a.txt
然后在这个目录中读取文件a.txt就可以了。
具体是这么使用的:
system("ipconfig >a.txt");
以后就使用普通的文件读取方法,在a.txt中寻找特定的IP地址字符串。需要相应的头文件。
然后在这个目录中读取文件a.txt就可以了。
具体是这么使用的:
system("ipconfig >a.txt");
以后就使用普通的文件读取方法,在a.txt中寻找特定的IP地址字符串。需要相应的头文件。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#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我
#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我
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询