zoukankan      html  css  js  c++  java
  • vc获取本地IP

    #include<stdio.h>
    #include<winsock2.h>
    #pragma comment(lib,"ws2_32.lib")
    void getLocalIp(void)
    {
    	WSADATA wsaData;
    	char name[155];
    	if ( WSAStartup( MAKEWORD(2,0), &wsaData ) == 0 )
    	{
    		if(gethostname(name,sizeof(name)) == 0)
    		{
    			printf("%s\n",name);
    			struct hostent* phe = gethostbyname(name);
    			if (0 == phe)
    			{
    				return;
    			}
    			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("IP %d:%s\n",i+1,inet_ntoa(addr));
    			}
    		} 
    		WSACleanup( );
    	}
    }
    int main(void)
    {
    	getLocalIp();
    	return 0;
    }



    WSADATA wsdData; //这个结构被用来存储 被WSAStartup函数调用后返回的 Windows Sockets数据。它包含Winsock.dll执行的数据。
    struct hostent *hn;hostent是host entry的缩写,该结构记录主机的信息,包括主机名、别名、地址类型、地址长度和地址列表。之所以主机的地址是一个列表的形式,原因是当一个主机有多个网络接口时,自然有多个地址。
    char HostName[255] = {0};
    WSAStartup(MAKEWORD(2,0),&wsdData);WSAStarup,是Windows SocKNDs Asynchronous的启动命令、Windows下的网络编程接口软件 Winsock1 或 Winsock2 里面的一个命令。
    gethostname(HostName, sizeof(HostName));//int PASCAL FAR gethostname(char FAR *name, int namelen);
    printf("%s\n",HostName);
    hn = gethostbyname(HostName);//gethostbyname()返回对应于给定主机名的包含主机名字和地址信息的hostent结构指针。结构的声明与gethostaddr()中一致。
    printf("%s\n",inet_ntoa(*(struct in_addr *)hn->h_addr_list[0]));//将一个IP转换成一个互联网标准点分格式的字符串。

  • 相关阅读:
    innodb next-key lock
    kafka-0.9
    aggregations 详解1(概述)
    mapping 详解5(dynamic mapping)
    mapping 详解4(mapping setting)
    mapping 详解3(Meta-Fields)
    mapping 详解2(field datatypes)
    mapping 详解1(mapping type)
    分布式 ES 操作流程解析
    ES 中的那些坑
  • 原文地址:https://www.cnblogs.com/lgh1992314/p/5835197.html
Copyright © 2011-2022 走看看