關于名稱與地址族.ppt_第1頁
關于名稱與地址族.ppt_第2頁
關于名稱與地址族.ppt_第3頁
關于名稱與地址族.ppt_第4頁
關于名稱與地址族.ppt_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第三章,關于名稱和地址族,通信應用軟件設計,2,目標,掌握DNS的基本概念 掌握編寫通用的名字地址的TCP程序 掌握通過名字獲取本機IP的方法。,3,將名字映射到數(shù)字(1),利用點或冒號分隔的數(shù)字串標識端點對用戶不是非常友好 主機的Internet地址被綁定到它連接到的網(wǎng)絡的某個部分。如果主機移到另一個網(wǎng)絡或者改變Internet服務提供商(ISP),它的Internet地址一般不得不改變。 事實上我們更容易記住像這樣的名字。,4,將名字映射到數(shù)字(2),Sockets API的大多數(shù)實現(xiàn)允許訪問把名稱映射到其他信息(包括Internet地址)的名稱服務。 名稱服務并不是使TCP/IP工作所必

2、須的。 主機命名服務的兩個主要來源是DNS(Domain Name System)和本地配置數(shù)據(jù)庫。,5,DNS,DNS是一種分布式數(shù)據(jù)庫,用于把像這樣的域名映射到Internet地址以及其他信息 DNS協(xié)議允許連接到Internet的主機使用TCP或UDP從該數(shù)據(jù)庫中檢索信息。 本地配置數(shù)據(jù)庫一般是用于名稱-Internet地址映射的特定于操作系統(tǒng)的機制。 對程序員來說,名稱服務的實現(xiàn)細節(jié)不用關心,只要調用相關的API函數(shù)就可以了。,6,訪問名稱服務,用于名稱服務的首選接口是函數(shù)getaddrinfo()函數(shù),int getaddrinfo(const char *hostStr,const

3、 char *serviceStr, const struct addrinfo *hints, struct addrinfo *results),7,GetAddrInfo.c,#include #include #include #include #include Practical.h int main(int argc, char *argv) if (argc != 3) DieWithUserMessage(Parameter(s), ); char *addrString = argv1; / Server address/name char *portString = arg

4、v2; / Server port/service,8,struct addrinfo addrCriteria; memset(,9,for (struct addrinfo *addr = addrList; addr != NULL; addr = addr-ai_next) PrintSocketAddress(addr-ai_addr, stdout); fputc(n, stdout); freeaddrinfo(addrList); / Free addrinfo allocated in getaddrinfo() exit(0); ,10,運行結果,11,addrinfo結構

5、體,struct addrinfo int ai_flags; /* Input flags. */ int ai_family;/* Protocol family for socket. */ int ai_socktype;/* Socket type. */ int ai_protocol;/* Protocol for socket. */ socklen_t ai_addrlen; /* Length of socket address. */ struct sockaddr *ai_addr;/* Socket address for socket. */ char *ai_ca

6、nonname;/* Canonical name for service location. */ struct addrinfo *ai_next;/* Pointer to next in list. */ ;,12,詳細信息,getaddrinfo()是一個“瑞士軍刀”類型的函數(shù) 第三個參數(shù)addrinfo結構告訴系統(tǒng)調用者對哪一類端點感興趣。 ai_flags的取值 AI_PASSIVE AI_CANONNAME AI_NUMERICHOST AI_ADDRCONFIG AI_V4MAPPED,13,編寫地址通用的代碼,void PrintSocketAddress(const st

7、ruct sockaddr *address, FILE *stream) if (address = NULL | stream = NULL) return; void *numericAddress; char addrBufferINET6_ADDRSTRLEN; in_port_t port;,14,switch (address-sa_family) case AF_INET: numericAddress = ,15,if (inet_ntop(address-sa_family, numericAddress, addrBuffer, sizeof(addrBuffer) =

8、NULL) fputs(invalid address, stream); / Unable to convert else fprintf(stream, %s, addrBuffer); if (port != 0) / Zero not valid in any socket addr fprintf(stream, -%u, port); ,16,通用的TCP客戶,程序包括下列文件 TCPClientUtility.c TCPEchoClient.c,17,通用的TCP服務器,程序包括下列文件 TCPServerUtility.c TCPEchoServer.c,18,IPv4與IPv6之間互操作,問題:如果一方使用IPv4而另一方使用IPv6,則會如何? 如果(并且僅當)使用IPv6的程序是雙棧系統(tǒng)時-即同時支持版本4和版本6,它們應該能夠互操作。特殊的“v4-v6映射”地址類使之成為可能。,19,從數(shù)字獲取名稱,反過來知道Internet數(shù)字地址可以獲得名稱 int getnameinfo(const struct sockaddr *address, socklen_t addressLength, char *node, socklen_t nodeLength, char *se

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論