




已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第章計算機網(wǎng)絡(luò)應(yīng)用程序設(shè)計,8.1 套接口API的有關(guān)概念 8.2 基本Socket函數(shù) 8.3 基于TCP的socket程序設(shè)計 8.4 基于UDP的socket 程序設(shè)計 8.5 輸入輸出多路復用 8.6 并發(fā)服務(wù)器程序設(shè)計,8.1 套接口API的有關(guān)概念,8.1.1 網(wǎng)絡(luò)應(yīng)用編程接口 Berkeley套接口API WinSock 遠程過程調(diào)用(RPC),8.1.2 socket編程模型及類型 套接口可分如下5種類型:流式套接字、數(shù)據(jù)報套接字、原始套接字、SOCK_SEQPACKET及SOCK_RDM。 流式套接字定義了一種可靠的面向連接的服務(wù),實現(xiàn)了無差錯的數(shù)據(jù)傳輸。 數(shù)據(jù)報套接字定義了一種無連接的服務(wù),數(shù)據(jù)通過相互獨立的報文進行傳輸,是無序的,并且不保證可靠。 原始套接字允許對低層協(xié)議如IP或ICMP直接訪問,主要用于新的網(wǎng)絡(luò)協(xié)議實現(xiàn)的測試等。,Internet的Socket編程模型,8.1.3 socket地址應(yīng)用進程的標識 Internet上兩臺主機種的進程間要進行通信,必須能夠互相識別。用于標識進程的信息有兩個: 主機名或主機地址 主機內(nèi)部標識進程的標識符 這兩部分合在一起,成為套接口地址(計算機通信的基礎(chǔ)構(gòu)筑塊 ),8.1.4 通信進程的阻塞和非阻塞方式 對于運行狀態(tài)中的進程來說,當某些條件不具備,如輸入輸出條件還沒有準備好時,該進程可以有兩種處理方式:阻塞與非阻塞。 阻塞方式 在阻塞方式下,當輸入輸出條件還沒有準備好時,就將進程轉(zhuǎn)入阻塞狀態(tài),標記阻塞原因,并保留當前進程現(xiàn)場信息,然后將控制轉(zhuǎn)入進程調(diào)度程序,等阻塞原因解除后,將進程狀態(tài)由阻塞變成就緒等待處理機,或直接獲得由調(diào)度程序再次分配的處理機,恢復阻塞的現(xiàn)場繼續(xù)執(zhí)行。 非阻塞方式 在非阻塞方式下,當輸入輸出條件還沒有準備好時,進程仍處于運行狀態(tài),通過循環(huán),反復進行某條件的查詢。一般說來,阻塞機制可以防止進程在循環(huán)反復的查詢等待中造成資源浪費。但是有時在應(yīng)用中需要進程一直處于運行狀態(tài),不希望進程在對socket的操作中阻塞,這時就要使用非阻塞機制。,8.2 基本Socket函數(shù),8.2.1 初始化套接口服務(wù)綁定socket() 1、功能: 在應(yīng)用程序中使用插口API時,首先要創(chuàng)建一個插口-socket。為了說明什么是socket,可以打個比方:一個電話插座,既可以接電話機打電話,也可以接傳真機發(fā)傳真,還可以接計算機上網(wǎng)。接上什么設(shè)備,就是綁定了什么服務(wù)。創(chuàng)建一個插口,就是創(chuàng)建一個通信,需要指定提供什么服務(wù),即為一個標識符綁定某個服務(wù),并為之分配資源。這個標識就是該插口標識。 應(yīng)用程序調(diào)用socket()函數(shù)將創(chuàng)建一個插口。 2、原型,8.2.2 本地地址綁定bind() 1、功能 調(diào)用函數(shù)bind(),可以將本地地址與插口綁定在一起。調(diào)用成功時,返回0;否則,返回1,并設(shè)置全局變量errno為錯誤類型 2、原型,參數(shù)說明 sockfd是函數(shù)socket返回的插口描述字; myaddr是特定于協(xié)議的地址結(jié)構(gòu)體的指針,指向本地插口地址; addrlen是插口地址結(jié)構(gòu)體的長度。,8.2.3 建立套接口連接綁定遠程服務(wù)器地址connect() 功能 函數(shù)connect()可以讓客戶機程序建立一個與TCP服務(wù)器的連接. 原型,參數(shù): sockfd是函數(shù)socket返回的插口描述符; servaddr指定遠程服務(wù)器的插口地址; addrlen是插口地址結(jié)構(gòu)體的長度。,8.2.4 套接口被動轉(zhuǎn)換listen() 函數(shù)listen()有兩個功能。 (1)主動插口的被動轉(zhuǎn)換 socket()創(chuàng)建的插口都是主動插口,只可以用來(調(diào)用connect())進行主動連接(發(fā)出請求),不能接收連接請求。listen()函數(shù)將未連接的主動插口轉(zhuǎn)換為被動插口,即傾聽插口(listening socket),告訴操作系統(tǒng)該插口可以接收連接請求。所以listen()也稱為創(chuàng)建傾聽插口函數(shù)。 (2)設(shè)置最大請求連接數(shù) listen()用一個參數(shù)(backlog)指定完成隊列的最大長度。如果一個客戶機的SYN數(shù)據(jù)段到達時,傾聽插口的完成隊列已經(jīng)滿了,TCP則忽略這個SYN數(shù)據(jù)段。 listen()函數(shù)執(zhí)行成功,返回0,服務(wù)器的TCP狀態(tài)由CLOSED轉(zhuǎn)變成LISTEN,成為被動模式;執(zhí)行失敗,返回1。 原型,參數(shù): sockfd為要轉(zhuǎn)換的已綁定本地地址的插口描述符; backlog設(shè)置請求隊列的最大長度,表示被動(傾聽)插口能夠接收的最大數(shù)目的未接收連接(相當于窗口通告)。,8.2.4 套接口被動轉(zhuǎn)換listen(),創(chuàng)建TCP服務(wù)器傾聽插口的過程 (1)首先調(diào)用socket()函數(shù)創(chuàng)建一個主動插口; (2)調(diào)用bind()函數(shù)進行插口地址綁定; (3)調(diào)用listen()函數(shù)進行轉(zhuǎn)換。,8.2.5 從被動套接口的完成隊列中接受一個連接請求accept() 功能 一個插口被創(chuàng)建、用bind綁定本地地址并轉(zhuǎn)換成被動模式后,必須接收一個連接請求。一旦接收了連接,服務(wù)器就能使用該連接與客戶機進行通信。面向連接傳輸協(xié)議的服務(wù)器調(diào)用 accept從被動(傾聽)插口的完成連接隊列中接收下一個連接請求。如果該完成連接隊列空,則使這個進程睡眠。 原型,參數(shù): sockfd為服務(wù)器已經(jīng)創(chuàng)建并綁定到指定插口地址的插口描述符; addr是指向一個Internet插口地址結(jié)構(gòu)體的指針; addrlen是指向一個整型數(shù)的指針。,8.2.5 從被動套接口的完成隊列中接受一個連接請求accept(),accept()工作過程 TCP使用偵聽插口接收客戶機的連接請求。如果調(diào)用accept()時,傾聽插口的完成隊列中有已經(jīng)完成3次握手的TCP連接,accept()就從隊列的首部讀取第一個連接,并返回該連接的描述符。如果調(diào)用accept()時,傾聽插口的完成隊列為空,進程將阻塞,等待出現(xiàn)新的完成3次握手的TCP連接送到完成隊列;TCP協(xié)議為服務(wù)器創(chuàng)建一個新的連接插口來標識這條新的連接,accept()返回該新連接的描述符。,8.2.6 基本套接口I/O函數(shù)列表,8.2.7 關(guān)閉插口通道與撤消套接口 1、概述 建立一對插口的連接之后,就可以進行通信了。由于TCP連接是全雙工的,對每一個套接口來說,都可以看作在使用讀、寫兩個通道進行通信。于是,關(guān)閉一個插口通信可以有兩種不同級別的方法。 (1)關(guān)閉插口通道,具體有三種方式: SHUT_RD關(guān)閉連接的讀通道; SHUT_WR關(guān)閉連接的寫通道; SHUT_RDWR關(guān)閉連接的讀寫通道。 (2)撤消套接口(句柄),同時關(guān)閉了連接的讀寫通道。 這兩種方式分別用兩個不同的函數(shù)shutdown()和close()實現(xiàn)。 2. close()原型 函數(shù)close()用于撤消一個插口,終止其TCP連接,其原型為 #include in close (int sockfd) 3. shutdown()原型 #include int shutdown (int sockfd, int howto);,8.3 基于TCP的socket程序設(shè)計,8.3.1 TCP有限狀態(tài)機 1、TCP有限狀態(tài)機的概念 在網(wǎng)絡(luò)通信中,一個健壯的插口應(yīng)用程序必須能夠處理通信過程中可能出現(xiàn)的各種狀態(tài)。對于TCP來說,不同的狀態(tài)將決定傳輸實體對一些事件的響應(yīng)。描述TCP在響應(yīng)各種事件時,各個宏觀狀態(tài)之間相互作用的規(guī)則稱為TCP有限狀態(tài)機(或稱TCP狀態(tài)轉(zhuǎn)換圖),它由圖所示的11種狀態(tài)組成。,TCP的有限狀態(tài)機,2、狀態(tài)轉(zhuǎn)換分析 (1) 客戶進程發(fā)起連接的狀態(tài)轉(zhuǎn)換過程 一個主機的客戶進程要發(fā)起連接,其TCP實體就發(fā)一個SYN置1的分組 由CLOSED狀態(tài)進入SYN_SENT狀態(tài)。 收到來自進程的SYN和ACK,TCP就發(fā)出三次握手中的最后一個ACK 進入ESTABLISHED狀態(tài)。這時就可以收發(fā)數(shù)據(jù)了。 (2) 客戶進程發(fā)起斷連請求(主動關(guān)閉)的狀態(tài)轉(zhuǎn)換過程 客戶進程要發(fā)起斷連,其TCP實體就發(fā)一個SYN置1的分組,等待確認ACK的到達 由ESTABLISHED狀態(tài)變?yōu)镕IN_WAIT_1狀態(tài)。 運行客戶進程的主機收到確認ACK,一個方向的連接關(guān)閉 進入FIN_WAIT_2狀態(tài)。 運行客戶進程的主機收到運行服務(wù)器的主機發(fā)送的FIN置1的分組后,應(yīng)響應(yīng)確認ACK。 收到確認ACK,連接不是立即進入到關(guān)閉CLOSED,而是先進入TIME_WAIT狀態(tài)。 TCP在TIME_WAIT狀態(tài)等待2MSL(MSL表示分組在網(wǎng)絡(luò)中的壽命),才刪除原來建立的連接記錄 返回CLOSED狀態(tài)。,8.3.2 TCP的C/S模型時序圖 面向連接的C/S模型的典型時序圖說明:服務(wù)器必須首先啟動,直到它執(zhí)行accept()調(diào)用,進入等待狀態(tài),方可接收客戶機請求。否則,客戶機的connect()調(diào)用將返回出錯代碼,連接宣告失敗。,面向連接的C/S模型的典型時序圖,面向連接服務(wù)器處理的請求C/S模型工作過程: 服務(wù)進程首先調(diào)用socket( )創(chuàng)建一個字節(jié)流套接字,并調(diào)用bind( )將服務(wù)器地址捆扎在該套接字上,接著調(diào)用listen( )監(jiān)聽連接請求,隨后調(diào)用accept( )做好與客戶進程建立連接的準備,無連接請求時,服務(wù)進程被阻塞。當連接請求到來后,服務(wù)器進程被喚醒,建立一個新的Socket,并用新套接字同客戶進程的套接字建立連接,而服務(wù)進程最早生成的套接字則繼續(xù)用于監(jiān)聽網(wǎng)絡(luò)上的服務(wù)請求。 客戶進程調(diào)用socket( )創(chuàng)建字節(jié)流套接字,然后調(diào)用connect( )向服務(wù)進程發(fā)出連接請求。 服務(wù)進程和客戶進程通過調(diào)用read( )/recv( )和Write( )/send( )交換數(shù)據(jù)。,8.4 基于UDP的socket 程序設(shè)計,8.4.1 UDP編程模式 UDP提供不保證順序的用戶數(shù)據(jù)報傳輸服務(wù)。在比較簡單的應(yīng)用中,客戶機常常只用單個UDP報文來發(fā)送請求,服務(wù)器也用單個報文回送應(yīng)答。這種情況下,UDP服務(wù)器和客戶機間的交互程序采用循環(huán)結(jié)構(gòu)是非常有利的。圖表明了這種處理結(jié)構(gòu)。,圖 采用循環(huán)結(jié)構(gòu)的UDP服務(wù)器與客戶機間的交互,8.5 輸入輸出多路復用,輸入輸出多路復用基本工作原理: 輸入輸出多路復用是一種特殊的阻塞式輸入輸出模式,其特點:用select()調(diào)用指示內(nèi)核
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 景區(qū)道路安全知識培訓
- 生產(chǎn)豆芽培訓課件
- 膀胱造瘺口病人的護理
- 存包柜企業(yè)數(shù)字化轉(zhuǎn)型與智慧升級戰(zhàn)略研究報告
- 組合印刷機企業(yè)ESG實踐與創(chuàng)新戰(zhàn)略研究報告
- 循環(huán)水及乏汽余熱回收大型熱泵裝置企業(yè)數(shù)字化轉(zhuǎn)型與智慧升級戰(zhàn)略研究報告
- 畜力拖曳車輛企業(yè)ESG實踐與創(chuàng)新戰(zhàn)略研究報告
- 傘類制品零件和裝飾件企業(yè)數(shù)字化轉(zhuǎn)型與智慧升級戰(zhàn)略研究報告
- 單相電子式電能表企業(yè)縣域市場拓展與下沉戰(zhàn)略研究報告
- 不銹鋼救生衣箱企業(yè)ESG實踐與創(chuàng)新戰(zhàn)略研究報告
- 2025-2030中國類腦計算行業(yè)市場發(fā)展現(xiàn)狀及建設(shè)案例與發(fā)展趨勢研究報告
- 2025時政試題及答案(100題)
- DB11-T 765.4-2010 檔案數(shù)字化規(guī)范 第4部分:照片檔案數(shù)字化加工
- 華南理工大學自主招生個人陳述自薦信范文
- 輸血常見不良反應(yīng)及處理培訓
- 2024年建筑業(yè)10項新技術(shù)
- 六年級品社《春天的故事》(課堂PPT)
- 關(guān)于電機功率、轉(zhuǎn)矩和慣量等
- 客戶關(guān)系生命周期各階段的營銷策略
- “差點兒”和“差點兒沒”PPT課件
- 2019最新十八項醫(yī)療核心制度考試題及答案
評論
0/150
提交評論