<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 嵌入式Linux網(wǎng)絡(luò )編程之:網(wǎng)絡(luò )基礎編程

嵌入式Linux網(wǎng)絡(luò )編程之:網(wǎng)絡(luò )基礎編程

作者: 時(shí)間:2013-09-13 來(lái)源:網(wǎng)絡(luò ) 收藏

本文引用地址:http://dyxdggzs.com/article/257116.htm

表10.4列出了inet_ntop函數的語(yǔ)法要點(diǎn)。

表10.4 inet_ntop函數語(yǔ)法要點(diǎn)

所需頭文件

#includearpa/inet.h>

函數原型

intinet_ntop(intfamily,void*addrptr,char*strptr,size_tlen)

函數傳入值

family

AF_INET:IPv4協(xié)議

AF_INET6:IPv6協(xié)議

函數傳入值

addrptr:轉化后的地址

strptr:要轉化的值

len:轉化后值的大小

函數返回值

成功:0

出錯:-1

4.名字地址轉化

(1)函數說(shuō)明。

通常,人們在使用過(guò)程中都不愿意記憶冗長(cháng)的IP地址,尤其到IPv6時(shí),地址長(cháng)度多達128位,那時(shí)就更加不可能一次次記憶那么長(cháng)的IP地址了。因此,使用主機名將會(huì )是很好的選擇。在Linux中,同樣有一些函數可以實(shí)現主機名和地址的轉化,最為常見(jiàn)的有g(shù)ethostbyname()、gethostbyaddr()和getaddrinfo()等,它們都可以實(shí)現IPv4和IPv6的地址和主機名之間的轉化。其中g(shù)ethostbyname()是將主機名轉化為IP地址,gethostbyaddr()則是逆操作,是將IP地址轉化為主機名,另外getaddrinfo()還能實(shí)現自動(dòng)識別IPv4地址和IPv6地址。

gethostbyname()和gethostbyaddr()都涉及一個(gè)hostent的結構體,如下所示:

structhostent

{

char*h_name;/*正式主機名*/

char**h_aliases;/*主機別名*/

inth_addrtype;/*地址類(lèi)型*/

inth_length;/*地址字節長(cháng)度*/

char**h_addr_list;/*指向IPv4或IPv6的地址指針數組*/

}

調用gethostbyname()函數或gethostbyaddr()函數后就能返回hostent結構體的相關(guān)信息。

getaddrinfo()函數涉及一個(gè)addrinfo的結構體,如下所示:

structaddrinfo

{

intai_flags;/*AI_PASSIVE,AI_CANONNAME;*/

intai_family;/*地址族*/

intai_socktype;/*socket類(lèi)型*/

intai_protocol;/*協(xié)議類(lèi)型*/

size_tai_addrlen;/*地址字節長(cháng)度*/

char*ai_canonname;/*主機名*/

structsockaddr*ai_addr;/*socket結構體*/

structaddrinfo*ai_next;/*下一個(gè)指針鏈表*/

}

hostent結構體而言,addrinfo結構體包含更多的信息。

(2)函數格式。

表10.5列出了gethostbyname()函數的語(yǔ)法要點(diǎn)。

表10.5 gethostbyname函數語(yǔ)法要點(diǎn)

所需頭文件

#includenetdb.h>

函數原型

structhostent*gethostbyname(constchar*hostname)

函數傳入值

hostname:主機名

函數返回值

成功:hostent類(lèi)型指針

出錯:-1

調用該函數時(shí)可以首先對hostent結構體中的h_addrtype和h_length進(jìn)行設置,若為IPv4可設置為AF_INET和4;若為IPv6可設置為AF_INET6和16;若不設置則默認為IPv4地址類(lèi)型。

表10.6列出了getaddrinfo()函數的語(yǔ)法要點(diǎn)。

表10.6 getaddrinfo()函數語(yǔ)法要點(diǎn)

所需頭文件

#includenetdb.h>

函數原型

intgetaddrinfo(constchar*node,constchar*service,conststructaddrinfo*hints,structaddrinfo**result)

函數傳入值

node:網(wǎng)絡(luò )地址或者網(wǎng)絡(luò )主機名

service:服務(wù)名或十進(jìn)制的端口號字符串

hints:服務(wù)線(xiàn)索

result:返回結果

函數返回值

成功:0

出錯:-1

在調用之前,首先要對hints服務(wù)線(xiàn)索進(jìn)行設置。它是一個(gè)addrinfo結構體,表10.7列舉了該結構體常見(jiàn)的選項值。

表10.7 addrinfo結構體常見(jiàn)選項值

結構體頭文件

#includenetdb.h>

ai_flags

AI_PASSIVE:該套接口是用作被動(dòng)地打開(kāi)

AI_CANONNAME:通知getaddrinfo函數返回主機的名字

ai_family

AF_INET:IPv4協(xié)議

AF_INET6:IPv6協(xié)議

AF_UNSPEC:IPv4或IPv6均可

ai_socktype

SOCK_STREAM:字節流套接字socket(TCP)

SOCK_DGRAM:數據報套接字socket(UDP)

ai_protocol

IPPROTO_IP:IP協(xié)議

IPPROTO_IPV4:IPv4協(xié)議

4

IPv4

IPPROTO_IPV6:IPv6協(xié)議

IPPROTO_UDP:UDP

IPPROTO_TCP:TCP

注意

(1)通常服務(wù)器端在調用getaddrinfo()之前,ai_flags設置AI_PASSIVE,用于bind()函數(用于端口和地址的綁定,后面會(huì )講到),主機名nodename通常會(huì )設置為NULL。

(2)客戶(hù)端調用getaddrinfo()時(shí),ai_flags一般不設置AI_PASSIVE,但是主機名nodename和服務(wù)名servname(端口)則應該不為空。

(3)即使不設置ai_flags為AI_PASSIVE,取出的地址也可以被綁定,很多程序中ai_flags直接設置為0,即3個(gè)標志位都不設置,這種情況下只要hostname和servname設置的沒(méi)有問(wèn)題就可以正確綁定。

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)

linux相關(guān)文章:linux教程




評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>