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转换成一个互联网标准点分格式的字符串。

  • 相关阅读:
    gulp
    grunt
    iscroll手册
    Javascript闭包演示【转】
    【转】Backbone.js学习笔记(二)细说MVC
    【转】Backbone.js学习笔记(一)
    node包管理相关
    写出高效率的正则表达式的几点建议
    常用正则表达式
    help、man和info工具的区别
  • 原文地址:https://www.cnblogs.com/lgh1992314/p/5835197.html
Copyright © 2011-2022 走看看