SELECTIO模型服務(wù)端的程序?qū)崿F(xiàn)實(shí)驗(yàn)(共7頁)_第1頁
SELECTIO模型服務(wù)端的程序?qū)崿F(xiàn)實(shí)驗(yàn)(共7頁)_第2頁
SELECTIO模型服務(wù)端的程序?qū)崿F(xiàn)實(shí)驗(yàn)(共7頁)_第3頁
SELECTIO模型服務(wù)端的程序?qū)崿F(xiàn)實(shí)驗(yàn)(共7頁)_第4頁
SELECTIO模型服務(wù)端的程序?qū)崿F(xiàn)實(shí)驗(yàn)(共7頁)_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上 SELECT I/O 模型服務(wù)端的程序?qū)崿F(xiàn)一實(shí)驗(yàn)?zāi)康耐ㄟ^這次實(shí)驗(yàn),掌握Winsock提供的兩種套接字模式:鎖定和非鎖定,一個應(yīng)用程序如何通過他們管理I/O,Winsock提供了一些I/O模型,select模型有助于應(yīng)用程序通過一種“異步”方式,一次對一個或多個套接字上進(jìn)行的通信加以管理,防止應(yīng)用程序在套接字處于鎖定模式中,在一次I/O綁定調(diào)用過程中,被迫進(jìn)入“鎖定”狀態(tài);同時防止在套接字處于非鎖定模式中時,產(chǎn)生WSAEWOULDBLOCK錯誤。二實(shí)驗(yàn)環(huán)境操作系統(tǒng):Microsoft Windows 7 專業(yè)版 64位開發(fā)軟件:Visual C+開發(fā)語言:C三實(shí)驗(yàn)原理

2、Select模型是winsock中最常見的I/O模型。之所以稱其為“select模型”,是由于他的中心思想便是利用select函數(shù)實(shí)現(xiàn)對I/O的管理!最初設(shè)計(jì)該模型時,主要面向的是某些使用Unix操作系統(tǒng)的計(jì)算機(jī)。select(選擇)模型是將網(wǎng)絡(luò)事件與套接字集合關(guān)聯(lián),有網(wǎng)絡(luò)事件發(fā)生的套接字保留在集合中,無網(wǎng)絡(luò)事件發(fā)生的套接字被從集合中清除。select有“篩選”之意,即將有網(wǎng)絡(luò)事件發(fā)生的套接字“篩選”出來!Select函數(shù)本身是阻塞函數(shù),使用它可以在一個線程中出力多個套接字。select模型使那些想避免在套接字調(diào)用過程中被無辜“鎖定”的應(yīng)用程序,采取一種有序的方式,同時進(jìn)行對多個套接字的管理。

3、設(shè)計(jì)這個函數(shù),唯一的目的便是防止應(yīng)用程序在套接字處于鎖定模式中時,在一次I/O綁定調(diào)用(如send或recv)過程中,被迫進(jìn)入“鎖定”狀態(tài);同時防止在套接字處于非鎖定模式中時,產(chǎn)生WSAEWOULDBLOCK錯誤。四實(shí)驗(yàn)方法及步驟 1.程序設(shè)計(jì)步驟(1)初始化Winsock庫(2)創(chuàng)建監(jiān)聽套接字(3)綁定套接字到本地機(jī)器(4)進(jìn)入監(jiān)聽模式2.程序流程圖3.關(guān)鍵源碼的解析(1)fd_set fdSocket;/ 所有可用套節(jié)字集合FD_ZERO(&fdSocket); /將fdSocket初始化成空集合FD_SET(sListen, &fdSocket); /將套接字sListe

4、n加入到fdSocket(2)fd_set fdRead = fdSocket; /將fdSocket賦值給fdReadint nRet = :select(0, &fdRead, NULL, NULL, NULL);/此處的select保留發(fā)生網(wǎng)絡(luò)事件的套接字,去除無響應(yīng)的套接字。(3)通過將原來fdSocket集合與select處理過的fdRead集合比較,/ 確定都有哪些套節(jié)字有未決I/O,并進(jìn)一步處理這些I/Ofor(int i=0; i<(int)fdSocket.fd_count; i+)if(FD_ISSET(fdSocket.fd_arrayi, &fdR

5、ead) if(fdSocket.fd_arrayi = sListen)/ (1)監(jiān)聽套節(jié)字接收到新連接if(fdSocket.fd_count < FD_SETSIZE) /FD_SELECT為64 sockaddr_in addrRemote;int nAddrLen = sizeof(addrRemote);SOCKET sNew = :accept(sListen, (SOCKADDR*)&addrRemote, &nAddrLen);FD_SET(sNew, &fdSocket);printf("接收到連接(%s)n", :inet

6、_ntoa(addrRemote.sin_addr);第一次循環(huán)執(zhí)行的是sListen套接字,第二次循環(huán)執(zhí)行是sNew套接字;第二次循環(huán)fdSocket集合中存在sListen和sNew兩個套接字,fdRead集合中存在3中情況:sListen在sNew不在;sListen不在sNew在;sListen在sNew都在五實(shí)驗(yàn)數(shù)據(jù)記錄及分析客戶端使用本地回環(huán)地址127.0.0.1進(jìn)行測試,測試結(jié)果正確。六實(shí)驗(yàn)總結(jié)這次的實(shí)驗(yàn)是SELECT I/O 模型服務(wù)端的程序?qū)崿F(xiàn),通過本次實(shí)驗(yàn),讓我對select模型有了更好的認(rèn)識和理解。之前的實(shí)驗(yàn)都是關(guān)于套接字有關(guān)的內(nèi)容,但套接字都是阻塞的,不能同時處理多個連

7、接,這次的select就很好的解決了這個問題?,F(xiàn)在一個線程可以出力多個套接字,會在得到具體的通知后調(diào)用響應(yīng)的函數(shù)。 而且select在阻塞和非阻塞模式下都能運(yùn)行。這次的改進(jìn)在編程史上是一次變革,同樣對于我們同學(xué)也有了很好的啟發(fā),有些東西是在不斷的改進(jìn)中才能得到提高,對于一些事物我們在知道了它的不足之處之后想辦法彌補(bǔ)就是進(jìn)步!教師評閱:90-95分:實(shí)驗(yàn)課前做了充足的準(zhǔn)備工作,與專業(yè)相關(guān)知識能緊密聯(lián)系。實(shí)驗(yàn)報(bào)告條理清晰,書寫規(guī)范,圖文并茂,報(bào)告內(nèi)容全面,主要內(nèi)容闡述詳細(xì)。認(rèn)識體會深刻,起到了實(shí)驗(yàn)的目的。80-85分:實(shí)驗(yàn)課前做了充足的準(zhǔn)備工作,與專業(yè)相關(guān)知識能較緊密聯(lián)系。實(shí)驗(yàn)報(bào)告條理清晰,書寫規(guī)范,圖文并茂,報(bào)告內(nèi)容較全面,主要內(nèi)容闡述較詳細(xì)。認(rèn)識體會較深刻,達(dá)到了實(shí)驗(yàn)的作用。70-75分:實(shí)驗(yàn)課前準(zhǔn)備較充足,與專業(yè)相關(guān)知識能基本能聯(lián)系,實(shí)驗(yàn)報(bào)告條理清晰,書寫較規(guī)范,報(bào)告內(nèi)容較全面,能用部分圖片展示相關(guān)內(nèi)容,主要內(nèi)容闡述較詳

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論