資源描述:
《vc下搭建tcp服務器》由會員上傳分享,免費在線閱讀,更多相關內(nèi)容在教育資源-天天文庫。
1、使用TCP套接字編程可以實現(xiàn)基于TCP/IP協(xié)議的面向連接的通信,它分為服務器端和客戶端兩部分,其主要實現(xiàn)過程如下圖所示。作為服務器一方,其主要函數(shù)如下:socket函數(shù):為了執(zhí)行網(wǎng)絡輸入輸出,一個進程必須做的第一件事就是調(diào)用socket函數(shù)獲得一個文件描述符。-----------------------------------------------------------------?intsocket(intfamily,inttype,intprotocol); ? 返回:非負描述字---成功 -1---失敗?--
2、--------------------------------------------------------------- 第一個參數(shù)指明了協(xié)議簇,目前支持5種協(xié)議簇,最常用的有AF_INET(IPv4協(xié)議)和AF_INET6(IPv6協(xié)議);第二個參數(shù)指明套接口類型,有三種類型可選:SOCK_STREAM(字節(jié)流套接口)、SOCK_DGRAM(數(shù)據(jù)報套接口)和SOCK_RAW(原始套接口);如果套接口類型不是原始套接口,那么第三個參數(shù)就為0。2.bind函數(shù):為套接口分配一個本地IP和協(xié)議端口,對于網(wǎng)際協(xié)議,協(xié)議地址是32位IP
3、v4地址或128位IPv6地址與16位的TCP或UDP端口號的組合;如指定端口為0,調(diào)用bind時內(nèi)核將選擇一個臨時端口,如果指定一個通配IP地址,則要等到建立連接后內(nèi)核才選擇一個本地IP地址。-------------------------------------------------------------------?intbind(intsockfd,conststructsockaddr*server,socklen_taddrlen);?返回:0---成功 -1---失敗 ?---------------------
4、----------------------------------------------第一個參數(shù)是socket函數(shù)返回的套接口描述字;第二和第第三個參數(shù)分別是一個指向特定于協(xié)議的地址結構的指針和該地址結構的長度。3.listen函數(shù):listen函數(shù)僅被TCP服務器調(diào)用,它的作用是將用sock創(chuàng)建的主動套接口轉(zhuǎn)換成被動套接口,并等待來自客戶端的連接請求。-------------------------------------------------------------------?intlisten(intsockfd,in
5、tbacklog); ?返回:0---成功 -1---失敗?------------------------------------------------------------------- 第一個參數(shù)是socket函數(shù)返回的套接口描述字;第二個參數(shù)規(guī)定了內(nèi)核為此套接口排隊的最大連接個數(shù)。由于listen函數(shù)第二個參數(shù)的原因,內(nèi)核要維護兩個隊列:以完成連接隊列和未完成連接隊列。未完成隊列中存放的是TCP連接的三路握手為完成的連接,accept函數(shù)是從以連接隊列中取連接返回給進程;當以連接隊列為空時,進程將進入睡眠狀態(tài)。4.a
6、ccept函數(shù):accept函數(shù)由TCP服務器調(diào)用,從已完成連接隊列頭返回一個已完成連接,如果完成連接隊列為空,則進程進入睡眠狀態(tài)。------------------------------------------------------------------- ?intaccept(intlistenfd,structsockaddr*client,socklen_t*addrlen); ?回:非負描述字---成功 -1---失敗?---------------------------------------------
7、----------------------第一個參數(shù)是socket函數(shù)返回的套接口描述字;第二個和第三個參數(shù)分別是一個指向連接方的套接口地址結構和該地址結構的長度;該函數(shù)返回的是一個全新的套接口描述字;如果對客戶段的信息不感興趣,可以將第二和第三個參數(shù)置為空。5.send和recv函數(shù):TCP套接字提供了send()和recv()函數(shù),用來發(fā)送和接收操作。這兩個函數(shù)與write()和read()函數(shù)很相似,只是多了一個附加的參數(shù)。(1)send()函數(shù)用于數(shù)據(jù)的發(fā)送。----------------------------------
8、--------------------------------- ssize_tsend(intsockfd,constvoid*buf,size_tlen,intflags); ?回:返回寫出的字節(jié)