国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

[C++ 網(wǎng)絡協(xié)議編程] 域名及網(wǎng)絡地址

這篇具有很好參考價值的文章主要介紹了[C++ 網(wǎng)絡協(xié)議編程] 域名及網(wǎng)絡地址。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1. DNS服務器

DNS(Domain Name System):是對IP地址和域名(如:www.baidu.com等)進行相互轉(zhuǎn)換的系統(tǒng),其核心是DNS服務器。

[C++ 網(wǎng)絡協(xié)議編程] 域名及網(wǎng)絡地址,網(wǎng)絡協(xié)議,網(wǎng)絡協(xié)議,c++

我們輸入的www.baidu.com是域名,是一種虛擬地址,而非實際地址,DNS服務器會將這個虛擬地址轉(zhuǎn)換為實際地址,即IP地址。若我們直接輸入IP地址,則不會發(fā)生上面的轉(zhuǎn)換。

如果想獲取某個域名對應的IP地址,則可以cmd輸入:ping www.baidu.com

如果想獲取本機注冊的默認的DNS服務器地址,則可以cmd輸入:nslookup(windows)、nslookup server(linux)

所有計算機都記錄著默認DNS服務器地址,通過這個DNS服務器就能得到相應域名的IP地址信息,如果本機的默認DNS服務器解析不了這個域名,那么就會逐級往上詢問,直到根DNS服務器,它直到應該向哪個DNS服務器詢問,再向下級DNS專遞解析請求,得到IP地址后,返回給發(fā)起請求的主機。所以,DNS就是一種層次化管理的分布式數(shù)據(jù)庫系統(tǒng)。

[C++ 網(wǎng)絡協(xié)議編程] 域名及網(wǎng)絡地址,網(wǎng)絡協(xié)議,網(wǎng)絡協(xié)議,c++

2. IP地址和域名之間的轉(zhuǎn)換

IP地址和域名之間的關(guān)系:一個IP地址可以對應多個域名,一個域名也可以對應多個IP地址。

通常來說,域名是不會變化的,但是IP地址是可以隨時變化的,因為服務器會變化,尤其是像那種有多個服務器進行負載均衡的,就有多個IP地址,所以,我們在編寫程序時,要通過用戶輸入的域名來解析獲取IP地址。

2.1 gethostbyname函數(shù)(利用域名獲取IP地址)

#include <netdb.h>
struct hostnet* gethostbyname(const char* hostname);
成功返回hostnet結(jié)構(gòu)體,失敗返回Null指針
struct hostent
{
    char* h_name;
    char** h_aliases;
    int h_addrtype;
    int h_length;
    char** h_addr_list;
}
參數(shù) 含義
h_name 存有官方域名。官方域名代表某一主頁,不是所有公司都有
h_aliases 其它可以訪問這個域名所指向主頁的域名。同一個IP可以綁定多個域名。
h_addrtype 地址族信息,若是IPv4則是AF_INET,IPv6則是AF_INET6
h_length 保存IP地址字節(jié)長度。IPV4則是4,IPV6則是16
h_addr_list

以整數(shù)形式保存域名對應的IP地址,每個數(shù)組實際上是以in_addr結(jié)構(gòu)體存儲的。

struct in_addr
{
    in_addr_t      s_addr;        //32位IPv4地址
}

所以在使用時,要進行強制轉(zhuǎn)換為in_addr* 類型

hostent參數(shù)結(jié)構(gòu):

[C++ 網(wǎng)絡協(xié)議編程] 域名及網(wǎng)絡地址,網(wǎng)絡協(xié)議,網(wǎng)絡協(xié)議,c++

h_addr_list數(shù)組實際上是以in_addr結(jié)構(gòu)體存儲的,為什么不直接以in_addr數(shù)組存儲,而是以字符數(shù)組存儲?

答:是因為為了兼容IPv6地址信息,考慮到通用性,所以用字符數(shù)組存儲。

那為什么不用void*存儲?

答:是因為當時還沒有對void指針標準化,當時無法明確指出指針類型時采用的就是char指針。?文章來源地址http://www.zghlxwxcb.cn/news/detail-663605.html

2.2 gethostbyaddr函數(shù)(利用IP地址獲取域名)

#include<netdb.h>
struct hostent* gethostbyaddr(
const char* addr,          //含有IP地址信息的in_addr結(jié)構(gòu)體指針,同時為了傳遞IPv4地址之外的其他信息,所以聲明為char指針
socklen_t len,             //向第一個參數(shù)傳遞的地址信息字節(jié)數(shù),IPv4為4,IPv6為16
int family                 //地址族信息
);

到了這里,關(guān)于[C++ 網(wǎng)絡協(xié)議編程] 域名及網(wǎng)絡地址的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務器費用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包