套接字接口函數(shù)實(shí)驗(yàn)報(bào)告.doc_第1頁
套接字接口函數(shù)實(shí)驗(yàn)報(bào)告.doc_第2頁
套接字接口函數(shù)實(shí)驗(yàn)報(bào)告.doc_第3頁
套接字接口函數(shù)實(shí)驗(yàn)報(bào)告.doc_第4頁
套接字接口函數(shù)實(shí)驗(yàn)報(bào)告.doc_第5頁
已閱讀5頁,還剩7頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

電子科技大學(xué)通信學(xué)院套接字接口函數(shù)實(shí)驗(yàn)報(bào)告班 級(jí) 2011221010 學(xué) 生 熊澤瞳 劉炎宏 學(xué) 號(hào) 2011221010020(熊澤瞳) 2011221010010(劉炎宏) 教 師 段景山 2004年9月套接字接口函數(shù)【實(shí)驗(yàn)?zāi)康摹空莆仗捉幼纸涌诤瘮?shù)的正確使用方法了解接口函數(shù)使用中可能出現(xiàn)的錯(cuò)誤及解決方法【實(shí)驗(yàn)環(huán)境】單人實(shí)驗(yàn),或兩人聯(lián)網(wǎng)配合實(shí)驗(yàn)。【實(shí)驗(yàn)原理】見本實(shí)驗(yàn)指導(dǎo)書相關(guān)內(nèi)容【實(shí)驗(yàn)步驟及記錄】注意:本實(shí)驗(yàn)測(cè)試各種套接字函數(shù)時(shí),均使用如下形式判斷函數(shù)執(zhí)行是否成功和取得錯(cuò)誤碼,再通過查閱教材了解錯(cuò)誤碼的具體含義:retval = xxxx( ); / xxxx( )表示被測(cè)試的套接字函數(shù)if( retval = = SOCKET_ERROR) /或者if ( retval != 0)r = WSAGetLastError(); /r中取得錯(cuò)誤碼。每次測(cè)試完畢后,使用菜單中debug/stop debug選項(xiàng)使測(cè)試停止下來,如果沒有特殊說明,都應(yīng)把測(cè)試對(duì)象恢復(fù)到測(cè)試前的正常狀態(tài),以免影響下一個(gè)測(cè)試內(nèi)容。l 面向連接服務(wù)器的各接口函數(shù):socket、bind、listen、accept、send、recv、closesocket1、socket( )打開例程中面向連接服務(wù)器工程1) 測(cè)試參數(shù)1。測(cè)試目標(biāo):使用AF_ISO,或其它不是AF_INET家族的標(biāo)識(shí),注意:使用單步調(diào)試方法取得測(cè)試結(jié)果。參數(shù)1的值 AF_ISO ,s 的值: 4294967295 ,r取得的錯(cuò)誤碼 10047 ,錯(cuò)誤含義 WSAEAFNOSUPPORT 地址家族不支持請(qǐng)求的操作。對(duì)套接字類型不支持的操作來說,在試著執(zhí)行它時(shí),就會(huì)出現(xiàn)這個(gè)錯(cuò)誤。 。2) 測(cè)試參數(shù)2。使用非標(biāo)準(zhǔn)套接字類型,如:6。記錄錯(cuò)誤提示。參數(shù)1的值 AF_INET ,retval 的值: -1 ,r取得的錯(cuò)誤碼 10044 ,錯(cuò)誤含義 WSAESOCKTNOSUPPORT 不支持的套接字類型。對(duì)指定的地址家族來說,沒有相應(yīng)的具體套接字類型支持。 。3) 測(cè)試參數(shù)3。一般情況下,不特別指明使用協(xié)議類型時(shí)使用0。現(xiàn)在分別使用不同的協(xié)議號(hào)測(cè)試并記錄:參數(shù)2:SOCK_STREAM,參數(shù)3:6retval 的值: 0 ,r取得的錯(cuò)誤碼 -858993560 ,錯(cuò)誤含義 r錯(cuò)誤碼變量是沒有初始化,沒有錯(cuò)誤 。參數(shù)2:SOCK_STREAM,參數(shù)3:7retval 的值: -1 ,r取得的錯(cuò)誤碼 10043 ,錯(cuò)誤含義 WSAEPROTONOSUPPORT 不支持的協(xié)議。系統(tǒng)中沒有安裝請(qǐng)求的協(xié)議或沒有相應(yīng)的實(shí)施方案。 。參數(shù)2:SOCK_DGRAM,參數(shù)3:17retval 的值: 0 ,r取得的錯(cuò)誤碼 -858993560 ,錯(cuò)誤含義 r錯(cuò)誤碼變量是沒有初始化,沒有錯(cuò)誤 。參數(shù)2:SOCK_DGRAM,參數(shù)3:19retval 的值: -1 ,r取得的錯(cuò)誤碼 10043 ,錯(cuò)誤含義 WSAEPROTONOSUPPORT 不支持的協(xié)議。系統(tǒng)中沒有安裝請(qǐng)求的協(xié)議或沒有相應(yīng)的實(shí)施方案。 。結(jié)論:socket()函數(shù)的三個(gè)參數(shù)主要用于定義協(xié)議家族,套接字類型以及協(xié)議類型。如果當(dāng)前環(huán)境不支持相應(yīng)的類型,則socket()會(huì)返回失敗。2、bind( )1) 測(cè)試參數(shù)1。測(cè)試目標(biāo):使用尚未申請(qǐng)?zhí)捉幼仲Y源的套接字描述符,能否綁定套接字地址在s socket( );一句及相關(guān)的錯(cuò)誤判斷等語句前加”/”方式變成注釋語句。觀察bind函數(shù)執(zhí)行的結(jié)果。retval 的值: -1 ,r取得的錯(cuò)誤碼 10038 ,錯(cuò)誤含義 WSAENOTSOCK無效套接字上的套接字操作。 。2) 測(cè)試參數(shù)2。測(cè)試目標(biāo):在套接字地址中分別使用不正確的地址族標(biāo)識(shí)、本地IP地址和端口號(hào)測(cè)試。a、在local結(jié)構(gòu)中,sin_family成員賦值為AF_OSI,retval 的值: -1 ,r取得的錯(cuò)誤碼 10047 ,錯(cuò)誤含義 WSAEAFNOSUPPORT 地址家族不支持請(qǐng)求的操作。對(duì)套接字類型不支持的操作來說,在試著執(zhí)行它時(shí),就會(huì)出現(xiàn)這個(gè)錯(cuò)誤。 。b、在local結(jié)構(gòu)中,sin_addr成員賦值為本計(jì)算機(jī)的IP地址,retval 的值: 0 ,r取得的錯(cuò)誤碼 -858993460 ,錯(cuò)誤含義 沒有錯(cuò)誤 。c、在local結(jié)構(gòu)中,sin_addr成員賦值為非本計(jì)算機(jī)的IP地址,如同小組的另一個(gè)同學(xué)的IP地址;retval 的值: -1 ,r取得的錯(cuò)誤碼 10049 ,錯(cuò)誤含義 WSAEADDRNOTAVAIL 不能分配請(qǐng)求的地址。A P I 調(diào)用中指定的地址對(duì)那個(gè)函數(shù)來說無效時(shí),就會(huì)產(chǎn)生這樣的錯(cuò)誤。 。d、在local結(jié)構(gòu)中,sin_port成員賦值為135;retval 的值: 0 ,r取得的錯(cuò)誤碼 -858993460 ,錯(cuò)誤含義 沒有錯(cuò)誤 。思考:什么樣的端口值會(huì)導(dǎo)致出錯(cuò)?。如果試圖bind()已經(jīng)分配給其他進(jìn)程的端口則會(huì)出錯(cuò)。一般寫程序,不用選擇1024之前的端口。3) 測(cè)試參數(shù)3。參數(shù)3:10retval 的值: -1 ,r取得的錯(cuò)誤碼 10014 ,錯(cuò)誤含義 WSAEFAULT地址無效。傳給Wi n s o c k 函數(shù)的指針地址無效。 參數(shù)3:16retval 的值: 0 ,r取得的錯(cuò)誤碼 -858993460 ,錯(cuò)誤含義 沒有錯(cuò)誤 。參數(shù)3:40retval 的值: 0 ,r取得的錯(cuò)誤碼 -858993460 ,錯(cuò)誤含義 沒有錯(cuò)誤 。思考:什么樣的套接字地址結(jié)構(gòu)大小是不正確的?因?yàn)楸硎镜刂沸畔⒌慕Y(jié)構(gòu)有很多,為了保持兼容,第三個(gè)參數(shù)的結(jié)構(gòu)大小會(huì)用于判斷地址結(jié)構(gòu)版本的用途,當(dāng)給定的地址結(jié)構(gòu)大小不能正常識(shí)別出地址信息就會(huì)出錯(cuò)吧。bind函數(shù)的測(cè)試結(jié)論:bind()函數(shù)僅僅表示網(wǎng)絡(luò)編程模型的一個(gè)基本操作,不僅僅是tcpip使用。因此保證參數(shù)的正確能使bind()正常工作。bind()需要的參數(shù)是分配好資源的套接字標(biāo)識(shí)符以及地址信息。3、listen( )1) 測(cè)試參數(shù)1。測(cè)試目標(biāo):使用尚未建立本地半相關(guān)的套接字預(yù)測(cè)測(cè)試結(jié)果:(可從winsock.h的錯(cuò)誤代碼列表中找出可能的錯(cuò)誤類型,然后再用實(shí)驗(yàn)證明。)將bind()一句及相關(guān)判錯(cuò)的語句前面加“/”方式變成注釋語句后測(cè)試retval 的值: -1 ,r取得的錯(cuò)誤碼 10022 ,錯(cuò)誤含義 WSAEINVAL參數(shù)無效。指定了一個(gè)無效參數(shù)。 。2) 測(cè)試參數(shù)2。有文獻(xiàn)載明:“windows套接字實(shí)現(xiàn)中最多只允許服務(wù)器同時(shí)監(jiān)聽5個(gè)套接字。使用參數(shù)0,則系統(tǒng)將把該參數(shù)改為1,而使用超過5的值,系統(tǒng)將自動(dòng)把該參數(shù)改為5。”使用不同的參數(shù)值,測(cè)試實(shí)際效果,具體步驟如下:a、 設(shè)置listen()第2個(gè)參數(shù)的值b、 單步調(diào)試服務(wù)器程序,執(zhí)行到listen下一句,即在錯(cuò)誤判斷語句前c、 在例程目錄下有一個(gè)coclient.exe,雙擊執(zhí)行,觀察客戶機(jī)與服務(wù)器連接的情況。(客戶機(jī)程序會(huì)打印連接結(jié)果)d、 同時(shí)執(zhí)行多個(gè)coclient(不要關(guān)閉已經(jīng)打印結(jié)果的客戶機(jī)),記錄有多少個(gè)客戶機(jī)能同時(shí)與服務(wù)器連接。設(shè)置參數(shù)值為0,有 1 個(gè)客戶機(jī)可同時(shí)與服務(wù)器連接設(shè)置參數(shù)值為1,有 1 個(gè)客戶機(jī)可同時(shí)與服務(wù)器連接設(shè)置參數(shù)值為10,有 5 個(gè)客戶機(jī)可同時(shí)與服務(wù)器連接思考,如果想結(jié)束套接字的監(jiān)聽狀態(tài),可以如何處理?closesocket()關(guān)閉套接字listen()函數(shù)的測(cè)試結(jié)論:listen()將會(huì)為分配好的服務(wù)器套接字監(jiān)聽客戶端的連接,可以指定等待連接的數(shù)量,但是會(huì)有限制,但并不是5.4、accept( )1)測(cè)試參數(shù)1目標(biāo):能否在沒有設(shè)置為監(jiān)聽狀態(tài)的套接字上接受連接將listen()一句設(shè)為注釋語句,然后測(cè)試retval 的值: -1 ,r取得的錯(cuò)誤碼 10022 ,錯(cuò)誤含義 10022 WSAEINVAL參數(shù)無效。 。2)測(cè)試參數(shù)2(這是一個(gè)輸出參數(shù),其作用是告訴使用者遠(yuǎn)端點(diǎn)地址。)測(cè)試目標(biāo):如果事先往遠(yuǎn)端點(diǎn)地址結(jié)構(gòu)(remote)里面填寫一個(gè)指定的遠(yuǎn)端點(diǎn)地址,能夠限制服務(wù)器只接受這個(gè)遠(yuǎn)端點(diǎn)的連接請(qǐng)求。步驟如下a、在調(diào)用accept之前,給remote(遠(yuǎn)端點(diǎn))的IP地址或端口號(hào)賦值,注意IP地址不指定為同小組另一個(gè)同學(xué)的地址,或端口號(hào)不是本地客戶機(jī)綁定的端口號(hào)(即,聯(lián)網(wǎng)實(shí)驗(yàn)為非客戶機(jī)的IP地址,單機(jī)實(shí)驗(yàn)為非客戶機(jī)的端口號(hào))。注意:本實(shí)驗(yàn)的客戶機(jī)(coclient.exe)端口為0x4321.b、將服務(wù)器單步調(diào)試到accept()阻塞。c、雙擊例程提供的coclient.exe,觀察是否能夠連接服務(wù)器。連接是否成功: 能 accept()執(zhí)行后,remote內(nèi)存放的IP地址為 127.0.0.1 ,端口號(hào)為 8515 。結(jié)論:(能否限制連接服務(wù)器的客戶機(jī)地址)不能限制3)測(cè)試參數(shù)3參數(shù)3的作用與bind()函數(shù)參數(shù)3一致,可同樣方法如0,15,16,40等值進(jìn)行測(cè)試。accept函數(shù)的測(cè)試結(jié)論:accept()函數(shù)為已經(jīng)處于監(jiān)聽的服務(wù)器套接字選擇請(qǐng)求進(jìn)行處理,返回新的連接的套接字。5、recv( )1)測(cè)試參數(shù)1目標(biāo):在一個(gè)沒有建立連接的套接字上嘗試接收數(shù)據(jù)。將accept一句改為注釋語句,并將recv()里的套接字標(biāo)識(shí)符改為s,然后測(cè)試:retval 的值: -1 ,r取得的錯(cuò)誤碼 10057 ,錯(cuò)誤含義 WSAENOTCONN套接字尚未連接。 。2)測(cè)試參數(shù)2這是程序接收數(shù)據(jù)緩沖區(qū)指針,接收緩沖區(qū)要求程序設(shè)計(jì)者事先準(zhǔn)備好的空間,即該指針已經(jīng)指向一塊已經(jīng)向系統(tǒng)申請(qǐng),確定大小的空間。測(cè)試目標(biāo):如果不使用指向確定空間的指針,將會(huì)出現(xiàn)什么錯(cuò)誤。a、在聲明接受緩沖區(qū)時(shí),使用指針聲明而不是字符數(shù)組申明。 如 char * recvbuf;(字符數(shù)組聲明時(shí)向系統(tǒng)申請(qǐng)了一塊確定大小的空間,而字符串指針的聲明僅僅是表明該變量是一個(gè)指針而已)b、先啟動(dòng)服務(wù)器,單步調(diào)試到accept后阻塞,再啟動(dòng)coclient.exe程序c、繼續(xù)單步調(diào)試服務(wù)器,觀察recv()函數(shù)的錯(cuò)誤情況。(或在recv()函數(shù)處設(shè)置調(diào)試斷點(diǎn),使用F5鍵進(jìn)行調(diào)試,可以節(jié)約一定時(shí)間)retval 的值: -1 ,r取得的錯(cuò)誤碼 10014 ,錯(cuò)誤含義 WSAEFAULT地址無效。傳給Wi n s o c k 函數(shù)的指針地址無效。若指定的緩沖區(qū)太小,也會(huì)產(chǎn)生這個(gè)錯(cuò)誤。 。3)測(cè)試參數(shù)3此參數(shù)用于設(shè)置接收緩沖區(qū)的大小/長度。緩沖區(qū)長度參數(shù)可以小于等于程序員實(shí)際準(zhǔn)備的緩沖區(qū)大小,但如果大于這個(gè)值,則可能造成不可預(yù)計(jì)的錯(cuò)誤。測(cè)試目標(biāo):如果給出的接收緩沖區(qū)大小與緩沖區(qū)實(shí)際大小不一致時(shí),會(huì)出現(xiàn)什么樣的錯(cuò)誤。測(cè)試步驟同上。服務(wù)器上接收緩沖區(qū)以char recvbuf4方式申請(qǐng)4字節(jié)空間。a、客戶機(jī)在正確連接服務(wù)器并出現(xiàn)“請(qǐng)輸入”的提示后,輸入6個(gè)字符的字符串。b、recv()參數(shù)3使用0,4和10分別測(cè)試。參數(shù)3:0retval 的值: 0 ,r取得的錯(cuò)誤碼 -858993460 ,recvbuf的內(nèi)容 沒有初始化 。錯(cuò)誤含義 沒有出錯(cuò) 。參數(shù)3:4retval 的值: 4 ,r取得的錯(cuò)誤碼 -858993460 ,recvbuf的內(nèi)容 hhhh 。錯(cuò)誤含義 沒有出錯(cuò) 。參數(shù)3:10retval 的值: 10 ,r取得的錯(cuò)誤碼 -858993460 ,recvbuf的內(nèi)容 hhhh 。錯(cuò)誤含義 沒有報(bào)錯(cuò) 。系統(tǒng)是否出現(xiàn)其它錯(cuò)誤: 沒有 。4)測(cè)試參數(shù)4在windows socket里flag可以是0,MSG_PEEK和MSG_OOB,一般設(shè)置為0。如果將flag設(shè)置為MSG_PEEK狀態(tài),套接字上接收的數(shù)據(jù)不會(huì)因?yàn)橛脩粽{(diào)用recv()而從緩沖隊(duì)列中消失,因此,當(dāng)用戶下一次調(diào)用recv時(shí),上一次的數(shù)據(jù)又重復(fù)出現(xiàn)了。測(cè)試目標(biāo):分別使用0和MSG_PEEK測(cè)試,對(duì)比測(cè)試結(jié)果。a、將服務(wù)器例程的recv()函數(shù)以以下語句代替retval = recv(ns,recvbuf,2,MSG_PEEK);recvbuf0 = 0;recvbuf1 = 0; /清空用戶緩沖區(qū)retval = recv(ns,recvbuf,2,0);b、在第一個(gè)recv處設(shè)置調(diào)試斷點(diǎn)。按F5鍵開始調(diào)試服務(wù)器;c、啟動(dòng)coclient程序,連接服務(wù)器,并輸入2個(gè)字符的傳輸字符串d、繼續(xù)單步調(diào)試服務(wù)器,觀察兩個(gè)recv語句收到的字符串是否一致。參數(shù)4:0第一個(gè)recv()處retval 的值: 2 , recvbuf的內(nèi)容 he 。第二個(gè)recv()處retval 的值: 2 , recvbuf的內(nèi)容 ll 。參數(shù)4:MSG_PEEK第一個(gè)recv()處retval 的值: 2 , recvbuf的內(nèi)容 he 。第二個(gè)recv()處retval 的值: 2 , recvbuf的內(nèi)容 he 。recv()函數(shù)的測(cè)試結(jié)論:recv()提供了獲取數(shù)據(jù)的辦法以及一些控制參數(shù)。6、send()1)測(cè)試參數(shù)1測(cè)試目標(biāo):在沒有建立連接的套接字上嘗試發(fā)送數(shù)據(jù)。將accept()到recv()一段的語句都變成注釋語句,然后測(cè)試retval 的值: -1 ,r取得的錯(cuò)誤碼 10057 ,錯(cuò)誤含義 WSAENOTCONN套接字尚未連接。 。2)測(cè)試參數(shù)2顯然,發(fā)送數(shù)據(jù)的程序需要事先準(zhǔn)備好待發(fā)的數(shù)據(jù),并將這些數(shù)據(jù)放在一個(gè)緩沖區(qū)內(nèi)。測(cè)試目標(biāo):如果用戶給出的指針沒有指向一個(gè)正確的緩沖區(qū),會(huì)出現(xiàn)什么情況。a、將服務(wù)器例程發(fā)送緩沖區(qū)的聲明改為:char * sendbuf;b、將服務(wù)器例程send()函數(shù)改為:retval = send( ns, sendbuf, 3 , 0);c、在send()處設(shè)置調(diào)試斷點(diǎn),啟動(dòng)服務(wù)器調(diào)試。打開coclient.exe與服務(wù)器建立連接,并向服務(wù)器發(fā)送數(shù)據(jù)。d、繼續(xù)單步調(diào)試服務(wù)器,記錄send函數(shù)的返回值retval 的值: -1 ,r取得的錯(cuò)誤碼 10014 ,錯(cuò)誤含義 WSAEFAULT 地址無效。傳給Wi n s o c k 函數(shù)的指針地址無效。若指定的緩沖區(qū)太小,也會(huì)產(chǎn)生這個(gè)錯(cuò)誤。 。3)測(cè)試參數(shù)3通過發(fā)送數(shù)據(jù)長度參數(shù),程序員可以控制系統(tǒng)發(fā)送的數(shù)據(jù)量,即不一定將緩沖區(qū)的數(shù)據(jù)全部發(fā)送完。但是該長度不應(yīng)該超過實(shí)際緩沖區(qū)的大小,否則造成不可預(yù)計(jì)的后果。測(cè)試目標(biāo):如果發(fā)送數(shù)據(jù)的長度與發(fā)送緩沖區(qū)實(shí)際大小不一致時(shí),可能出現(xiàn)的后果。可以使用0,2,6等參數(shù)分別測(cè)試,同時(shí)觀察客戶機(jī)程序的打印結(jié)果。測(cè)試步驟同上。參數(shù)3:0retval 的值: 0 ,r取得的錯(cuò)誤碼 -858993460 ,錯(cuò)誤含義 沒有出錯(cuò) 。參數(shù)3:2retval 的值: 2 ,r取得的錯(cuò)誤碼 -858993460 ,錯(cuò)誤含義 沒有出錯(cuò) 。客戶機(jī)收到的數(shù)據(jù) AC 。參數(shù)3:6retval 的值: 6 ,r取得的錯(cuò)誤碼 -858993460 ,錯(cuò)誤含義 沒有報(bào)錯(cuò) 。客戶機(jī)收到的數(shù)據(jù) ACK 。send()函數(shù)的測(cè)試結(jié)論發(fā)送數(shù)據(jù),可以指定發(fā)送數(shù)據(jù)的大小。返回發(fā)送的大小。7、closesocket()這是一種“粗暴”的斷開連接方法。幾乎在任何時(shí)候都可以調(diào)用該函數(shù)以放棄對(duì)某個(gè)套接字的使用。1)測(cè)試參數(shù)1測(cè)試目標(biāo):關(guān)閉一個(gè)沒有申請(qǐng)?zhí)捉幼仲Y源的套接字描述符會(huì)出怎樣的錯(cuò)誤?重復(fù)關(guān)閉一個(gè)已經(jīng)關(guān)閉的套接字描述符會(huì)出怎樣的錯(cuò)誤?a、 在服務(wù)器例程的s = socket()前增加語句段:retval = closesocket(s);if(retval = SOCKET_ERROR)r = WSAGetLastError();記錄測(cè)試結(jié)果:retval 的值: -1 ,r取得的錯(cuò)誤碼 10038 ,錯(cuò)誤含義 WSAENOTSOCK無效套接字上的套接字操作。 。b、 在服務(wù)器例程的closesocket(ns);后再次關(guān)閉ns,測(cè)試并記錄結(jié)果:retval 的值: -1 ,r取得的錯(cuò)誤碼 10038 ,錯(cuò)誤含義 WSAENOTSOCK無效套接字上的套接字操作。 。closesocket()函數(shù)的測(cè)試結(jié)論l 面向連接客戶機(jī)的各接口函數(shù):connect8、connect()在兩個(gè)VC環(huán)境里分別打開面向連接客戶機(jī)工程和面向連接服務(wù)器工程,在客戶機(jī)工程里完成以下實(shí)驗(yàn)。1)測(cè)試函數(shù)執(zhí)行情況測(cè)試目標(biāo):在沒有運(yùn)行服務(wù)器的情況下,connect是否會(huì)一直阻塞?觀察connect的返回值。retval 的值: -1 ,r取得的錯(cuò)誤碼 10038 ,錯(cuò)誤含義 WSAENOTSOCK無效套接字上的套接字操作。 。2)測(cè)試參數(shù)1測(cè)試目標(biāo):在一個(gè)沒有建立本地半相關(guān)(綁定)的套接字上能否成功連接服務(wù)器?a、將客戶機(jī)例程中填寫local內(nèi)容和bind語句變成注釋語句b、啟動(dòng)執(zhí)行服務(wù)器c、單步調(diào)試客戶機(jī),觀察能否建立連接。retval 的值: -1 ,r取得的錯(cuò)誤碼 10038 ,錯(cuò)誤含義 WSAENOTSOCK無效套接字上的套接字操作。 。是否能正確建立連接 否 。3)測(cè)試參數(shù)2參數(shù)2是對(duì)方端點(diǎn)地址信息,可以使用一些特殊的地址來測(cè)試a、 使用遠(yuǎn)端點(diǎn)IP地址為INADDR_ANY測(cè)試。retval 的值: -1 ,r取得的錯(cuò)誤碼 10038 ,錯(cuò)誤含義 WSAENOTSOCK無效套接字上的套接字操作。 。b、 使用遠(yuǎn)端點(diǎn)IP地址為10.1.1.255廣播地址。retval 的值: -1 ,r取得的錯(cuò)誤碼 10038 ,錯(cuò)誤含義 WSAENOTSOCK無效套接字上的套接字操作。 。4)測(cè)試參數(shù)3參數(shù)3在上述幾個(gè)函數(shù)中都已經(jīng)實(shí)驗(yàn)過,有興趣的同學(xué)可以按照前面的方法測(cè)試一下。connect函數(shù)的測(cè)試結(jié)論:Connect()函數(shù)需要準(zhǔn)確的服務(wù)器地址,否則無法建立連接。l 無連接方式下的接口函數(shù):sendto、recvfrom分別在兩個(gè)VC中打開無連接服務(wù)器和無連接客戶機(jī)例程。可以現(xiàn)在服務(wù)器例程中測(cè)試recvfrom,然后在客戶機(jī)例程中測(cè)試sendto9、recvfrom( )本測(cè)試在無連接服務(wù)器中進(jìn)行1)測(cè)試參數(shù)1無連接服務(wù)下,用戶程序可以直接發(fā)送或接收數(shù)據(jù)而不需要建立連接,但是有一個(gè)基本要求,即服務(wù)器仍必須確定自己的地址,并在該處等待客戶機(jī)的數(shù)據(jù),以滿足客戶/服務(wù)器的通信模式。測(cè)試目標(biāo):如果在沒有建立本地半相關(guān)的套接字上,服務(wù)器是否能執(zhí)行recvfrom等待數(shù)據(jù)的到來。打開無連接服務(wù)器工程,注釋bind語句,進(jìn)入單步調(diào)試,并記錄recvfrom的執(zhí)行情況:retval 的值: -1 ,r取得的錯(cuò)誤碼 10022 ,錯(cuò)誤含義 WSAEINVAL參數(shù)無效。指定了一個(gè)無效參數(shù)。 也可能表明套接字當(dāng)前的狀態(tài)有錯(cuò) 。2)測(cè)試參數(shù)5參數(shù)4是個(gè)輸出參數(shù),用于告知用戶當(dāng)前收到數(shù)據(jù)的源端點(diǎn)地址信息。測(cè)試目標(biāo):我們能否使用這個(gè)參數(shù)來指定從某個(gè)源端點(diǎn)處接收數(shù)據(jù)?在服務(wù)器例程的recvform函數(shù)之前,往remote結(jié)構(gòu)里面填寫一個(gè)遠(yuǎn)端點(diǎn)地址(注意不能是同小組同學(xué)的IP地址和端口地址,或本地客戶機(jī)的端口地址),測(cè)試能否指定(限制)僅從某個(gè)端點(diǎn)接受報(bào)文。a、填寫remote結(jié)構(gòu),b、啟動(dòng)服務(wù)器單步調(diào)試c、啟動(dòng)客戶機(jī),向服務(wù)器發(fā)送數(shù)據(jù),記錄recvfrom的相關(guān)數(shù)據(jù)retval 的值: 5 ,recv

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論