<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

(3)使用實(shí)例。

下面的實(shí)例給出了getaddrinfo函數用法的示例,在后面小節中會(huì )給出gethostbyname函數用法的例子。

/*getaddrinfo.c*/

#includestdio.h>

#includestdlib.h>

#includeerrno.h>

#includestring.h>

#includenetdb.h>

#includesys/types.h>

#includenetinet/in.h>

#includesys/socket.h>

intmain()

{

structaddrinfohints,*res=NULL;

intrc;

memset(hints,0,sizeof(hints));

/*設置addrinfo結構體中各參數*/

hints.ai_flags=AI_CANONNAME;

hints.ai_family=AF_UNSPEC;

hints.ai_socktype=SOCK_DGRAM;

hints.ai_protocol=IPPROTO_UDP;

/*調用getaddinfo函數*/

rc=getaddrinfo(localhost,NULL,hints,res);

if(rc!=0)

{

perror(getaddrinfo);

exit(1);

}

else

{

printf(Hostnameis%sn,res->ai_canonname);

}

exit(0);

}

10.2.3socket基礎編程

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

socket編程的基本函數有socket()、bind()、listen()、accept()、send()、sendto()、recv()以及recvfrom()等,其中根據客戶(hù)端還是服務(wù)端,或者根據使用TCP協(xié)議還是UDP協(xié)議,這些函數的調用流程都有所區別,這里先對每個(gè)函數進(jìn)行說(shuō)明,再給出各種情況下使用的流程圖。

n socket():該函數用于建立一個(gè)socket連接,可指定socket類(lèi)型等信息。在建立了socket連接之后,可對sockaddr或sockaddr_in結構進(jìn)行初始化,以保存所建立的socket地址信息。

n bind():該函數是用于將本地IP地址綁定到端口號,若綁定其他IP地址則不能成功。另外,它主要用于TCP的連接,而在UDP的連接中則無(wú)必要。

n listen():在服務(wù)端程序成功建立套接字和與地址進(jìn)行綁定之后,還需要準備在該套接字上接收新的連接請求。此時(shí)調用listen()函數來(lái)創(chuàng )建一個(gè)等待隊列,在其中存放未處理的客戶(hù)端連接請求。

n accept():服務(wù)端程序調用listen()函數創(chuàng )建等待隊列之后,調用accept()函數等待并接收客戶(hù)端的連接請求。它通常從由bind()所創(chuàng )建的等待隊列中取出第一個(gè)未處理的連接請求。

n connect():該函數在TCP中是用于bind()的之后的client端,用于與服務(wù)器端建立連接,而在UDP中由于沒(méi)有了bind()函數,因此用connect()有點(diǎn)類(lèi)似bind()函數的作用。

n send()和recv():這兩個(gè)函數分別用于發(fā)送和接收數據,可以用在TCP中,也可以用在UDP中。當用在UDP時(shí),可以在connect()函數建立連接之后再用。

n sendto()和recvfrom():這兩個(gè)函數的作用與send()和recv()函數類(lèi)似,也可以用在TCP和UDP中。當用在TCP時(shí),后面的幾個(gè)與地址有關(guān)參數不起作用,函數作用等同于send()和recv();當用在UDP時(shí),可以用在之前沒(méi)有使用connect()的情況下,這兩個(gè)函數可以自動(dòng)尋找指定地址并進(jìn)行連接。

服務(wù)器端和客戶(hù)端使用TCP協(xié)議的流程如圖10.6所示。

服務(wù)器端和客戶(hù)端使用UDP協(xié)議的流程如圖10.7所示。

圖10.6使用TCP協(xié)議socket編程流程圖圖10.7使用UDP協(xié)議socket編程流程圖

(2)函數格式。

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

表10.8 socket()函數語(yǔ)法要點(diǎn)

所需頭文件

#includesys/socket.h>

函數原型

intsocket(intfamily,inttype,intprotocol)

函數傳入值

family:

協(xié)議族

AF_INET:IPv4協(xié)議

AF_INET6:IPv6協(xié)議

AF_LOCAL:UNIX域協(xié)議

AF_ROUTE:路由套接字(socket)

AF_KEY:密鑰套接字(socket)

type:

套接字類(lèi)型

SOCK_STREAM:字節流套接字socket

SOCK_DGRAM:數據報套接字socket

SOCK_RAW:原始套接字socket

protoco:0(原始套接字除外)

函數返回值

成功:非負套接字描述符

出錯:-1

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

表10.9 bind()函數語(yǔ)法要點(diǎn)

所需頭文件

#includesys/socket.h>

函數原型

intbind(intsockfd,structsockaddr*my_addr,intaddrlen)

函數傳入值

socktd:套接字描述符

my_addr:本地地址

addrlen:地址長(cháng)度

函數返回值

成功:0

出錯:-1

端口號和地址在my_addr中給出了,若不指定地址,則內核隨意分配一個(gè)臨時(shí)端口給該應用程序。

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

表10.10 listen()函數語(yǔ)法要點(diǎn)

所需頭文件

#includesys/socket.h>

函數原型

intlisten(intsockfd,intbacklog)

函數傳入值

socktd:套接字描述符

backlog:請求隊列中允許的最大請求數,大多數系統缺省值為5

函數返回值

成功:0

出錯:-1

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

表10.11 accept()函數語(yǔ)法要點(diǎn)

所需頭文件

#includesys/socket.h>

函數原型

intaccept(intsockfd,structsockaddr*addr,socklen_t*addrlen)

函數傳入值

socktd:套接字描述符

addr:客戶(hù)端地址

addrlen:地址長(cháng)度

函數返回值

成功:0

出錯:-1

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

表10.12 connect()函數語(yǔ)法要點(diǎn)

所需頭文件

#includesys/socket.h>

函數原型

intconnect(intsockfd,structsockaddr*serv_addr,intaddrlen)

函數傳入值

socktd:套接字描述符

serv_addr:服務(wù)器端地址

addrlen:地址長(cháng)度

函數返回值

成功:0

出錯:-1

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>