在socket中運(yùn)用域名

客戶(hù)端中直接運(yùn)用IP地址會(huì)有很大的弊病,一旦IP地址變更(IP地址會(huì)常常變化),客戶(hù)端軟件就會(huì)呈現(xiàn)毛病。
而運(yùn)用域名會(huì)便利許多,注冊(cè)后的域名只需每年續(xù)費(fèi)就永遠(yuǎn)屬于本人的,改換IP地址時(shí)修正域名解析即可,不會(huì)影響軟件的正常運(yùn)用。
關(guān)于域名注冊(cè)、域名解析、host 文件、DNS 效勞器等本節(jié)并未具體解說(shuō),請(qǐng)讀者自行腦補(bǔ)。本節(jié)重點(diǎn)解說(shuō)若何運(yùn)用域名。

為杏花嶺等地區(qū)用戶(hù)提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及杏花嶺網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為網(wǎng)站制作、成都網(wǎng)站建設(shè)、杏花嶺網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專(zhuān)業(yè)、用心的態(tài)度為用戶(hù)提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶(hù)的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!

經(jīng)過(guò)域名獲取IP地址

域名僅僅是IP地址的一個(gè)助記符,目標(biāo)是便利記憶,經(jīng)過(guò)域名并不克不及找到目的盤(pán)算機(jī),通訊之前必需要將域名轉(zhuǎn)換成IP地址。
gethostbyname() 函數(shù)可以完成這種轉(zhuǎn)換,它的原型為:

			struct hostent *gethostbyname(const char *hostname);

hostname 為主機(jī)名,也就是域名。運(yùn)用該函數(shù)時(shí),只需傳遞域名字符串,就會(huì)前往域名對(duì)應(yīng)的IP地址。前往的地址信息會(huì)裝入 hostent 構(gòu)造體,該構(gòu)造體的界說(shuō)如下:

			struct hostent{ char *h_name; //official name char **h_aliases; //alias list int h_addrtype; //host address type int h_length; //address lenght char **h_addr_list; //address list }

從該構(gòu)造體可以看出,不只前往IP地址,還會(huì)附帶其他信息,列位讀者只需存眷最初一個(gè)成員 h_addr_list。下面是對(duì)各成員的闡明:

  • h_name:官方域名(Official domain name)。官方域名代表某一主頁(yè),但實(shí)踐上一些有名公司的域名并未用官方域名注冊(cè)。

  • h_aliases:別號(hào),可以經(jīng)過(guò)多個(gè)域名拜訪統(tǒng)一主機(jī)。統(tǒng)一IP地址可以綁定多個(gè)域名,因而除了以后域名還可以指定其他域名。

  • h_addrtype:gethostbyname() 不只支撐 IPv4,還支撐 IPv6,可以經(jīng)過(guò)此成員獲取IP地址的地址族(地址類(lèi)型)信息,IPv4 對(duì)應(yīng) AF_INET,IPv6 對(duì)應(yīng) AF_INET6。

  • h_length:保管IP地址長(zhǎng)度。IPv4 的長(zhǎng)度為4個(gè)字節(jié),IPv6 的長(zhǎng)度為16個(gè)字節(jié)。

  • h_addr_list:這是最主要的成員。經(jīng)過(guò)該成員以整數(shù)方式保管域名對(duì)應(yīng)的IP地址。關(guān)于用戶(hù)較多的效勞器,能夠會(huì)分派多個(gè)IP地址給統(tǒng)一域名,應(yīng)用多個(gè)效勞器停止平衡負(fù)載。


hostent 構(gòu)造體變量的構(gòu)成如下圖所示:
在socket中運(yùn)用域名
下面的代碼次要演示 gethostbyname() 的使用,并闡明 hostent 構(gòu)造體的特征:

			#include <stdio.h> #include <stdlib.h> #include <WinSock2.h> #pragma comment(lib, "ws2_32.lib") int main(){ WSADATA wsaData; WSAStartup( MAKEWORD(2, 2), &wsaData); struct hostent *host = gethostbyname("www.baidu.com"); if(!host){ puts("Get IP address error!"); system("pause"); exit(0); } //別號(hào) for(int i=0; host->h_aliases[i]; i++){ printf("Aliases %d: %s\n", i+1, host->h_aliases[i]); } //地址類(lèi)型 printf("Address type: %s\n", (host->h_addrtype==AF_INET) ? "AF_INET": "AF_INET6"); //IP地址 for(int i=0; host->h_addr_list[i]; i++){ printf("IP addr %d: %s\n", i+1, inet_ntoa( *(struct in_addr*)host->h_addr_list[i] ) ); } system("pause"); return 0; }

運(yùn)轉(zhuǎn)后果:
Aliases 1: www.baidu.com
Address type: AF_INET
IP addr 1: 61.135.169.121
IP addr 2: 61.135.169.125

當(dāng)前名稱(chēng):在socket中運(yùn)用域名
網(wǎng)頁(yè)路徑:http://bm7419.com/article44/phophe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名App設(shè)計(jì)、小程序開(kāi)發(fā)建站公司、品牌網(wǎng)站建設(shè)、移動(dòng)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化