freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

網(wǎng)絡(luò)程序設(shè)計基本知識(編輯修改稿)

2025-02-02 19:07 本頁面
 

【文章內(nèi)容簡介】 。 return。 } //說明 Winsock DLL的加載正確 , 可以執(zhí)行以下的其他代碼 … //其他程序代碼 結(jié)束對 Winsock DLL庫的使用時 , 一定要調(diào)用WSACleanup(?)函數(shù)卸載所加載的庫 。 include void main(void) { WSADATA wsaData。 // 初始化 Winsock 版本 if ((Ret = WSAStartup(MAKEWORD(2,2), amp。wsaData)) != 0) { printf(WSAStartup failed with error %d\n, Ret)。 return。 } // 編寫 Winsock 通信代碼 // 程序結(jié)束后調(diào)用 WSACleanup if (WSACleanup() == SOCKET_ERROR) { printf(WSACleanup failed with error %d\n, WSAGetLastError())。 } } Winsock應(yīng)用程序框架 創(chuàng)建套接口 ——socket(?)或 WSASocket(?) 應(yīng)用程序在使用套接口通信前 , 必須要擁有一個套接口 。 使用 socket(?)或 WSASocket(?)函數(shù)來給應(yīng)用程序創(chuàng)建一個套接口 1. 函數(shù)格式 在 Winsock 1中提供的創(chuàng)建套接口函數(shù)的格式如下: SOCKET socket( int af, int type, int protocol )。 在 Winsock 2中提供的該函數(shù)的擴(kuò)展格式如下: SOCKET WSASocket( int af, int type, int protocol, LPWSAPROTOCOL_INFO lpProtocolInfo, Group g, int iFlags )。 2. 函數(shù)參數(shù)說明 以上兩種格式中 , 前面三個參數(shù)的含義是一樣的 , 說明如下: ● af:該參數(shù)說明套接口要使用的協(xié)議地址族 , 地址族與協(xié)議族的含義相同 。 如果想建立一個 UDP或 TCP套接口 ,只能用常量 AF_INET表示使用互聯(lián)網(wǎng)協(xié)議 (IP)地址 。 當(dāng)然 ,Winsock 2還支持其他的協(xié)議 , 但一般在程序中很少使用 。 ● type:該參數(shù)描述套接口的協(xié)議類型 。 當(dāng)?shù)谝粋€參數(shù) af是 AF_INET 時 , 它 只 能 使 用 SOCK_STREAM 、SOCK_DGRAM或 SOCK_RAW三個協(xié)議類型中的任一個 , 分別表示要創(chuàng)建的是流式套接口 、 數(shù)據(jù)報套接口或原始套接口 。 ● ?protocol:該參數(shù)說明該套接口使用的特定協(xié)議 。當(dāng)協(xié)議地址族 af和協(xié)議類型 type已經(jīng)確定后 , 協(xié)議字段可以使用的值是限定的 , 如表 61所示 。 如果調(diào)用者不希望特別指定所使用的協(xié)議 , 可以將此參數(shù)設(shè)置為 0,系統(tǒng)就根據(jù)前兩個參數(shù)的值自動確定一個協(xié)議字段的取值 。 以上三個參數(shù)就可以確定一個套接口,它們之間的對應(yīng)關(guān)系可以用表 61表示。 表 61 套接口參數(shù) 協(xié)議 地址族 套接口類型 套接口類型使用的值 協(xié)議字段 T CP S O CK _ S T RE A M IP P RO T O _ TC P UDP S O CK _ D G RA M IP P RO T O _ U D P 互聯(lián)網(wǎng)協(xié)議 ( IP ) A F _ IN E T Ra w s o c k e t s S O CK _ RA W IP P RO T O _ RA W IP P RO T O _ ICM P 系統(tǒng)可以根據(jù)這三個參數(shù)建立一個套接口 , 并給它分配相應(yīng)的資源 , 同時返回一個整型套接口號 。 因此 ,socket(?)函數(shù)調(diào)用實際上指定了相關(guān)五元組中的 “ 協(xié)議 ” 這一元 。 使用 Winsock 2時 , 一般可以先用 WSAEnumProtocols(?)函數(shù) (該函數(shù)在第 8章介紹 ), 以獲得系統(tǒng)所安裝協(xié)議的相關(guān)信息 。 當(dāng)然對現(xiàn)在的絕大部分用戶來說 , 直接使用AF_INET(IP協(xié)議族 )就可以了 , 因為幾乎所有的協(xié)議實現(xiàn)系統(tǒng)都支持 IP協(xié)議族 。 但要編寫通用性好的應(yīng)用程序時 ,最好還是先使用 WSAEnumProtocols(?)函數(shù)查詢一下系統(tǒng)安裝的協(xié)議 。 在 Winsock 2提供的擴(kuò)展格式中 , 增加了三個參數(shù) ,其含義說明如下 (因為常用的是格式 1, 所以這三個參數(shù)只需了解其大概的含義 ): ● lpProtocolInfo:一個指向 WSAPROTOCOL_INFO結(jié)構(gòu)的指針 , 該結(jié)構(gòu)定義所創(chuàng)建套接口的特性 。 如果本參數(shù)不指向空 (NULL), 則前三個參數(shù) (af, type, protocol)被忽略 , 系統(tǒng)就根據(jù)該結(jié)構(gòu)中三個字段的值確定套接口類型 。 ● g:套接口組的描述字 。 組參數(shù)始終為 0, 因為目前尚無可支持套接口組的 Winsock版本 。 ● iFlags:套接口屬性描述 。 iFlags可用參數(shù)如下: WSA_FLAG_OVERLAPPED WSA_FLAG_MULTIPOINT_C_ROOT WSA_FLAG_MULTIPOINT_C_LEAF WSA_FLAG_MULTIPOINT_C_ROOF WSA_FLAG_MULTIPOINT_D_LEAF 第一個標(biāo)志 WSA_FLAG_OVERLAPPED用于指定這個套接口具備重疊 I/O(是適用于 Winsock的通信模式之一 )的特性 。調(diào)用 socket(?) 建 立 一 個 套 接 字 時 ,WSA_FLAG_OVERLAPPED便是默認(rèn)設(shè)置 。 一般說來 , 在使用 WSASocket時 , 最好始終保持設(shè)定該標(biāo)志 。 后面 4個標(biāo)志用于處理多播套接口 。 3. 函數(shù)返回信息 該函數(shù)調(diào)用成功后 , 返回新創(chuàng)建的套接口號 , 它被定義成是一個無符號的整型數(shù)據(jù) 。 函數(shù)調(diào)用錯誤時返回 INVALID_SOCKET, 應(yīng)用程序可進(jìn)一步調(diào)用 WSAGetLastError(?)函數(shù)來獲取相應(yīng)的錯誤代碼 ??赡塬@得的錯誤代碼說明如下: ● WSANOTINITIALISED:在調(diào)用本 API 之前應(yīng)成功調(diào)用WSAStartup(?)。 ● WSAENETDOWN:網(wǎng)絡(luò)子系統(tǒng)失效; ● WSAEAFNOSUPPORT:不支持指定的地址族; ● WSAEINPROGRESS:一個阻塞的 Winsock調(diào)用正在進(jìn)行中 ,或者服務(wù)提供者仍在處理一個回調(diào)函數(shù); ● WSAEMFILE:無可用的套接口描述字; ● WSAENOBUFS:無可用的緩沖區(qū)空間 , 套接口無法創(chuàng)建; ● ?WSAEPROTONOSUPPORT:不支持指定的協(xié)議; ● ?WSAEPROTOTYPE:指定的協(xié)議對于本套接口類型錯誤; ● ?WSAESOCKTNOSUPPORT:本地址族不支持指定的套接口類型; ● ?WSAEINVAL: g參數(shù)非法 。 4. 函數(shù)使用說明 要創(chuàng)建一個流套接口時 , 可以使用下列三種格式之一: SOCKET sockid=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP)。 SOCKET sockid=WSASocket(AF_INET,SOCK_STREAM,0)。 SOCKET sockid=WSASocket(AF_INET,SOCK_STREAM,0,NULL,0, ?? WSA_FLAG_OVERLAPPED)。 要創(chuàng)建一個數(shù)據(jù)報套接口時 , 其格式如下 (為節(jié)省篇幅 ,兩種套接口的創(chuàng)建只給出了一種格式 ): SOCKET sockid=socket(AF_INET,SOCK_GDRAM,IPPROTO_UDP)。 要創(chuàng)建一個原始套接口時 , 其格式如下: SOCKET sockid=socket(AF_INET,SOCK_RAW,IPPROTO_ICMP)。 指定本地地址 ——bind(?) 當(dāng)用 socket(?)創(chuàng)建了一個套接口后 , 該套接口還是不能直接使用 , 因為它只存在于一個名字空間 (地址族 )中 , 也就是說它只確定了通信所希望使用的服務(wù)類型 , 并沒有與該主機(jī)上提供服務(wù)的某端口聯(lián)系在一起 , 這樣的套接口可以叫未命名的套接口 。 bind(?)函數(shù)通過給一個未命名的套接口分配一個本地名字來為套接口建立本地捆綁 , 即把一個套接口與一個主機(jī)地址和端口號聯(lián)系起來 。 本函數(shù)適用于數(shù)據(jù)報或流類套接口 。 1. 函數(shù)格式 bind(?)函數(shù)的格式如下: int bind( SOCKET s, const struct sockaddr FAR* name, int namelen )。 2. 函數(shù)參數(shù)說明 bind(?)函數(shù)中各參數(shù)的說明如下: ● ?s:標(biāo)識一未綁定套接口的描述字 , 它是 socket(?)函數(shù)調(diào)用成功時返回的值 。 ● ?name:是一個與指定協(xié)議有關(guān)的地址結(jié)構(gòu)指針 ,??它指向的值是賦予套接口的地址信息 。 在 Winsock中使用 sockaddr_in結(jié)構(gòu)指定 IP地址和端口信息 , 它的定義如下: struct sockaddr_in{ short sin_family。 u_short sin_port。 struct in_addr sin_addr。 char sin_zero[8]。 ? } sin_family字段必須為 AF_INET, 以告訴 Winsock所使用的是 IP地址族; sin_port是以網(wǎng)絡(luò)字節(jié)順序表示的 16位端口號; sin_addr是以網(wǎng)絡(luò)字節(jié)順序表示的 32位 IP地址; sin_zero字段不用 , 一般用 0填充 , 在程序中通常是使用 sockaddr_in之前將整個結(jié)構(gòu)置 0。 ● ?namelen: bind(?)函數(shù)的這個參數(shù)指地址參數(shù) (name)的長度。 3. 函數(shù)返回信息 如果調(diào)用沒有錯誤發(fā)生 , 則 bind(?)返回 0, 否則將返回 SOCKET_ERROR , 應(yīng)用程序可進(jìn)一步通過WSAGetLastError(?)函數(shù)來獲取相應(yīng)的錯誤代碼 。 下面是可能獲取的錯誤代碼: ● ?WSANOTINITIALISED:在使用此 API之前應(yīng)首先成功調(diào)用 WSAStartup(?); ● ?WSAENETDOWN: Windows套接口實現(xiàn)檢測到網(wǎng)絡(luò)子系統(tǒng)失效; ● ?WSAEADDRINUSE:所指定的端口已在使用中; ● ?WSAEFAULT: namelen參數(shù)太小 (小于 sockaddr結(jié)構(gòu)的大小 ); ● ?WSAEINPROGRESS:一個阻塞的 Windows套接口調(diào)用正在運行中; ● WSAEAFNOSUPPORT:本協(xié)議不支持所指定的地址族; ● WSAEINVAL:該套接口已與一個地址捆綁; ● WSAENOBUFS:無足夠可用緩沖區(qū) , 連接過多; ● WSAENOTSOCK:指定的描述字不是一個套接口 。 4. 函數(shù)使用說明 各種 IP地址和端口的設(shè)置可用表 62表示 。 表 62 IP地址和端口的幾種設(shè)置方式 IP 地址參數(shù) 端口參數(shù) 含 義 b i n d ( ) 使用說明 IN A D D R_ A N Y 非 0 IP 地址由系統(tǒng)內(nèi)核自動指定 可用于只有一個 IP 地址的服務(wù)器端 b i n d ( ) 調(diào)用中 IN A D D R_ A N Y 0 IP 地址和端口號都由系統(tǒng)內(nèi)核自動指定 這種方式常用于客戶端的 b i n d ( )調(diào)用中 指定本地 IP 地址 非 0 IP 地址和端口號都由b i n d ( ) 函數(shù)中的參數(shù)指定 這種方式常用于主機(jī)有多個 IP 地址的服務(wù)器端 b i n d ( ) 調(diào)用中 指定本地 IP 地址 0 端口號由內(nèi)核自動指定 用于客戶端 b i n d ( ) 調(diào)用中 在程序中使用 bind(?)調(diào)用的典型方式如下所示: include SOCKET s。 sockaddr_in tcpaddr。 int iSockErr。 int port=5000。 //端口號
點擊復(fù)制文檔內(nèi)容
試題試卷相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1