• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>



            做網(wǎng)絡(luò)模塊的時候經(jīng)常會遇到有關(guān)網(wǎng)址的處理.一般大致的情形是3種:

            1.得到的是域名,如:www.3322.org

            2.得到的是實際的IP地址,如:61.160.235.203

            3.得到的是經(jīng)過inet_addr處理過的IP,為unsigned long(DWORD)

            一.那么如果是給出點分制的IP要轉(zhuǎn)為DWORD型是如何轉(zhuǎn)化呢?這個其實最簡單,有專門的函數(shù)專門處理此事

            unsigned long dwIP = inet_addr("222.212.12.77");
            printf("IP(%s)->DWORD(%lu)\n");
            
            //output
            IP(222.212.12.77)->DWORD(1292686558)

            二.第一種情況的逆轉(zhuǎn)化

            #include <stdio.h>
            #include <stdlib.h>
            #include <sys/select.h>
            #include <netdb.h>
            #include <sys/socket.h>
            #include <netinet/in.h>
            #include <arpa/inet.h>
            #include <errno.h>
            #include <string.h>
            
            int main(int argc, char *argv[])
            {
            	struct in_addr net;
            	char tmp[16] = {0};
            
            	if(argc != 3)
            	{
            		printf("You MUST enter 3 varibal.No.1:func name No.2:case.No.3:ip(string or DWORD)\n");
            		return 0;
            	}
            
            	if(strcmp("1", argv[1]) == 0) 
            	{
            		char* ip_string;
            		ip_string = argv[2];
            		unsigned long dword = inet_addr(ip_string);
            
            		printf("IP(%s)-->DWORD(%lu)\n", ip_string, dword);
            	}
            	else if(strcmp("2", argv[1]) == 0)
            	{
            		net.s_addr = (unsigned long)atol(argv[2]);
            		strcpy(tmp, inet_ntoa(net));
            		printf("DWORD(%s)-->IP(%s)\n",argv[2], tmp);
            	}
            	return 0;
            }
            這里給出一個點分制IP和DWORD相互轉(zhuǎn)化的程序
            三.如果給出的是域名而想得到點分制的IP呢?
            這里給出一個接口,支持輸入的類型是點分制和域名2中類型,返回的是DWORD型的IP
            有一點要聲明的是gethostbyname這個函數(shù)必須在網(wǎng)絡(luò)連通的情況下才能正確完成域名的解析,你想,連個網(wǎng)都不通,它怎么解析?
            #include <stdio.h>
            #include <stdlib.h>
            #include <sys/select.h>
            #include <netdb.h>
            #include <sys/socket.h>
            #include <netinet/in.h>
            #include <arpa/inet.h>
            #include <errno.h>
            #include <string.h>
            
            
            #define DWORD unsigned long
            
            DWORD platform_domain2ip(const char *szDomain, char *szDotNumIP)
            {
            	char szAddr[32] = {0};
            	struct hostent *pHost;
            
            	printf("input domain name(%s)\n", szDomain);
            	
            
            	if((pHost = gethostbyname(szDomain)) == NULL)
            	{
            		printf("can not parse domain\n");
            		return -1;
            	}
            	printf("HostName :%s\n",pHost->h_name);
            	strcpy(szAddr, inet_ntoa(*((struct in_addr *)pHost->h_addr)));
            	printf("IP Address :%s\n", szAddr);
            	strcpy(szDotNumIP, szAddr);
            
            	return inet_addr(szAddr);
            }
            
            int main(int argc, char *argv[])
            {
            	DWORD dwip;
            	char *ip = malloc(32);
            	//dwip = platform_domain2ip("www.3322.org", ip);
            	dwip = platform_domain2ip("61.160.235.203", ip);
            	printf("ip 1 (%s) 2 dw(%lu)\n", ip, dwip);
            	return 0;
            }
            //可以將main的注冊分別打開來判斷下結(jié)果是否正確,這里給出運行的結(jié)果,有圖有真相
            編譯的命令再說下吧,怕有人不知道
            gcc gethost.c –Wall –o gethost//在linux下
            arm-hismall-linux-gcc gethost.c –Wall –o gethost//嵌入式環(huán)境下
             
            此接口已經(jīng)在我的工程中使用,在平臺IP的解析和3322的解析中得到了應(yīng)用,所以是穩(wěn)定可行的.
            這3中IP的轉(zhuǎn)化都了解了的話,那么網(wǎng)絡(luò)編程不就掃除了一個大石頭嗎?呵呵,大家功能進步
             
            網(wǎng)上比較流行的gethostbyname的例子如下,受到了啟發(fā)
            #include <stdio.h>
            #include <stdlib.h>
            #include <sys/select.h>
            #include <netdb.h>
            #include <sys/socket.h>
            #include <netinet/in.h>
            #include <arpa/inet.h>
            #include <errno.h>
            #include <string.h>
            
            int main(int argc, char **argv)
            {
                char *ptr,**pptr;
                struct hostent *hptr;
                char str[32];
            
                /* 取得命令后第一個參數(shù),即要解析的域名或主機名 */ 
                ptr = argv[1];
            
                /* 調(diào)用gethostbyname()。調(diào)用結(jié)果都存在hptr中 */ 
                if((hptr = gethostbyname(ptr)) == NULL)
                {
                    printf("gethostbyname error for host:%s\n", ptr);
                    return 1; /* 如果調(diào)用gethostbyname發(fā)生錯誤,返回1 */
                }
            
                 
                printf("official hostname:%s\n",hptr->h_name);
            
                /* 主機可能有多個別名,將所有別名分別打出來 */ 
                for(pptr = hptr->h_aliases; *pptr != NULL; pptr++)
                    printf("  alias:%s\n",*pptr);
            
                /* 根據(jù)地址類型,將地址打出來 */
                switch(hptr->h_addrtype)
                {
                    case AF_INET:
                    case AF_INET6:
                        pptr=hptr->h_addr_list;
            
                        /* 將剛才得到的所有地址都打出來。其中調(diào)用了inet_ntop()函數(shù)*/
                        for(;*pptr!=NULL;pptr++)
                        printf("  address:%s\n", inet_ntop(hptr->h_addrtype,*pptr, str, sizeof(str)));
                    break;
                    default:
                        printf("unknown address type\n");
                    break;
                }
            
                return 0;
            }

            posted on 2011-06-27 17:46 大寶天天見 閱讀(1140) 評論(0)  編輯 收藏 引用 所屬分類: 2.C/C++/C#/Java
            思思久久99热只有频精品66| 久久免费看黄a级毛片| 久久国产精品99精品国产| 久久夜色精品国产网站| 成人a毛片久久免费播放| 色综合久久中文字幕综合网| 午夜天堂av天堂久久久| 国内精品久久久久影院网站| 日韩久久久久中文字幕人妻| 无码人妻久久一区二区三区免费丨| 久久噜噜电影你懂的| 日本WV一本一道久久香蕉| 久久精品国产99国产精偷| 亚洲欧美一级久久精品| 亚洲综合久久综合激情久久| 久久久久久久97| 久久精品综合一区二区三区| 97久久久精品综合88久久| 精品久久久久成人码免费动漫| 色偷偷888欧美精品久久久| 国产成人精品久久| 中文精品久久久久人妻| 久久精品国产亚洲精品| 久久九九全国免费| 久久精品国产99久久无毒不卡| 久久婷婷五月综合成人D啪| 久久久青草青青国产亚洲免观| 久久99国产精品久久99果冻传媒| 亚洲熟妇无码另类久久久| 国产精品久久久久久五月尺| 三级韩国一区久久二区综合| 久久www免费人成精品香蕉| 久久99精品国产麻豆宅宅| 久久久久久九九99精品| 亚洲级αV无码毛片久久精品| 成人久久免费网站| A级毛片无码久久精品免费| 久久亚洲中文字幕精品有坂深雪| 久久综合国产乱子伦精品免费| 69久久夜色精品国产69| 色综合久久久久|