问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C++获取本机的IP地址。如何实现???

发布网友 发布时间:2022-05-06 02:47

我来回答

1个回答

热心网友 时间:2022-06-28 13:19

#include<WinSock2.h>
#pragma comment(lib,"WS2_32")
class CInitSock
{
public:
    CInitSock(BYTE minorVer=2,BYTE majorVer=2)
    {
        WSADATA wsaData;
        WORD sockVersion=MAKEWORD(minorVer,majorVer);
        if(WSAStartup(sockVersion,&wsaData)!=0)
        {
            exit(0);
        }
    }
    ~CInitSock()
    {
        WSACleanup();
    }
};


WSADATA   这个结构被用来存储 被WSAStartup函数调用后返回的 Windows Sockets 数据。它包含Winsock.dll 执行的数据。

WSAStartup    为了在应用程序当 中调用任何一个Winsock API函数,首先第一件事情就是必须通过WSAStartup函数完成对Winsock服务的初始化,因此需要调用WSAStartup函数。使用 Socket的程序在使用Socket之前必须调用WSAStartup函数。该函数的第一个参数指明程序请求使用的Socket版本,其中高位字节指明 副版本、低位字节指明主版本;操作系统利用第二个参数返回请求的Socket的版本信息。当一个应用程序调用WSAStartup函数时,操作系统根据请求的Socket版本来搜索相应的 Socket库,然后绑定找到的Socket库到该应用程序中。以后应用程序就可以调用所请求的Socket库中的其它Socket函数了。

WSACleanup   应用程序或DLL在使用Windows Sockets服务之前必须要进行一次成功的WSAStartup()调 用.当它完成了Windows Sockets的使用后,应用程序或DLL必须调用WSACleanup()将其从Windows Sockets的实现中注销,并且该实现释放为应用程序或DLL分配的任何资源.任何打开的并已建立连接的SOCK_STREAM类型套接口在调用 WSACleanup()时会重置; 而已经由closesocket()关闭却仍有要发送的悬而未决数据的套接口则不会受影响- 该数据仍要发送.   对应于一个任务进行的每一次WSAStartup()调用,必须有一个 WSACleanup()调用.只有最后的WSACleanup()做实际的清除工作;前面的调用仅仅将Windows Sockets DLL中的内置引用计数递减.一个简单的应用程序为确保WSACleanup()调用了足够的次数,可以在一个循环中不断调用WSACleanup()直 至返回WSANOTINITIALISED.





#include"initsock.h"
#include<iostream>
using std::cout;
using std::endl;

CInitSock initSock;
void IP()
{
    int i;
    char szHost[256];
    gethostname(szHost,256);
    hostent *pHost=gethostbyname(szHost);
    in_addr addr;
   
    char *p=pHost->h_addr_list[0];
    memcpy(&addr.S_un.S_addr,p,pHost->h_length);
    char *szIp=inet_ntoa(addr);
    cout<<szIp<<endl;
}

int main()
{
    IP();
    system("pause");
    return 0;
}


gethostname()   返回本地主机的标准主机名。
int PASCAL FAR gethostname(char FAR *name, int namelen);   
name: 一个指向将要存放主机名的缓冲区指针。   
namelen:缓冲区的长度。

hostent      是host entry的缩写,该结构记录主机的信息,包括主机名、别名、地址类型、地址长度和地址列表。之所以主机的地址是一个列表的形式,原因是当一个主机有多个网络接口时,自然有多个地址。

#define h_addr h_addr_list[0]    h_addr_list中的第一地址。

struct hostent {   
     char *h_name;       //地址的正式名称 
     char **h_aliases;   //空字节-地址的预备名称的指针。
     int h_addrtype;   //地址类型; 通常是AF_INET。
     int h_length;       //地址的比特长度。
     char **h_addr_list;     //零字节-主机网络地址指针。网络字节顺序。
};

memcpy
extern void *memcpy(void *destin, void *source, unsigned n);
由source指向地址为起始地址的连续n个字节的数据复制到以destin指向地址为起始地址的空间内。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
初一语文同步练习册68页第3题的作文! 是什么? 高一语文68页续写作文, 很久以前,在很远的地方,有个老头儿………_百度... 语文必修一68页写作练习的作文!800字、急求!。 涉嫌强奸罪但证据不足最长拘留多久 嗓子疼可以喝柠檬吗 喝柠檬水上火么?网上都说不上火,可为什么喝完柠檬水一觉起来嗓子... 三清茶功效原理 瑶寨三清茶 三清茶如何 如何判断三清茶的品质? C#获取本机外网IP C#中如何得到机器的IP地址 苹果手机能清理垃圾吗 用C# 如何获取局域网内电脑的IP地址 儿童抽动症什么症状孩子五岁老是眨眼说 关于石女的问题(急) 近几天孩子眼睛总是爱眨巴,看医生说是抽动症。不知严重与否?怎么治疗? 一个女生带着一个黑色的帽子和一个黑色的口罩和这个图片越像情侣越好 华为荣耀9打开花粉俱乐部通知栏和状态栏显示不出时间等内容如何解决? 5岁孩子得了抽动症怎么办 如何通过WIN API函数获得本机IP地址 手机qq显示4g在线怎么不显示可打QQ电话 我男朋友在全民k歌总是喜欢关注陌生女人回来,有时还加上微信,该管吗... 跪求最近左小青演的电视剧,【在线观看】免费百度云资源 【合集】江苏卫视以前播出过的电视剧,【在线观看】免费百度云资源 跪求最新敌特电视剧有哪些,【在线观看】免费百度云资源 跪求高明出演过的电视剧,【在线观看】免费百度云资源 跪求赵立新演的电视剧,【在线观看】免费百度云资源 盘点关于大学校园的电视剧,【在线观看】免费百度云资源 怎么做出来的豆腐胚子才能使炸出来的油豆腐,又不厚,又不是太硬,也不要有空洞,还能四四方方的不发泡。 用套接字编程获取自己电脑的主机名和主机IP地址 高分! 炒山药怎么做好吃,炒山药的家常做法 油豆腐怎样点浆 请问卤水做油豆腐怎么点浆啊? 银行卡可以在atm上激活码 我老公全民K歌的人我把她拉黑了,她还会在陌生人信息里是怎么回事 新版酷狗评论不见了 为什么12306改不了用户名? 酷狗评论可以同时在评论区和动态里显示吗 为什么对方QQ有时显示“4G在线,对方网络良好,适合打QQ电话”,有时不显示呢? 我用的是4g手机怎么取消qq屏蔽的所有 清明节小报,要自己画的,请再把内容告诉我一下 无线网qq在线,4g关闭的情况下关闭无线网qq会显示4g在线吗? 关于歌曲版权的问题 HTC手机如何下载360手机助手? 请问关于歌曲版权上的问题 手上有很多突起的小点点,微红,很痒 我手上长好多红点点,一按他又疼、又痒是怎么回事,是不是季节性的? 手心上生了好多红色的小点点 有点痒 好像没几天有多了些 有哪位专家知道这是什么病啊 会发展严重吗??? 手掌上长了非常多红点点疼、痒、脱皮如何