版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第三篇網(wǎng)絡(luò)安全理論與技術(shù)實驗篇第九章網(wǎng)絡(luò)通信編程實驗9.3CSOCKET下基于UDP協(xié)議的通信編程實驗網(wǎng)絡(luò)空間安全技術(shù)實踐教程19.3CSOCKET下基于UDP協(xié)議的通信編程實驗實驗?zāi)康模罕緦嶒炓笳莆栈赨DP協(xié)議的CSocket編程的基本原理和方法,并通過自己編程實現(xiàn)簡單的數(shù)據(jù)報套接字的C/S模型。網(wǎng)絡(luò)空間安全技術(shù)實踐教程29.3CSOCKET下基于UDP協(xié)議的通信編程實驗實驗內(nèi)容:
本次實驗要求在理解基于數(shù)據(jù)報套接字(UDP協(xié)議)的編程時序的基礎(chǔ)上,利用VS2010及以上環(huán)境下的CSocket來實現(xiàn)簡單的網(wǎng)絡(luò)通信系統(tǒng),即設(shè)計實現(xiàn)一個含有接收和發(fā)送功能的簡易聊天軟件。網(wǎng)絡(luò)空間安全技術(shù)實踐教程39.3CSOCKET下基于UDP協(xié)議的通信編程實驗實驗要點說明:(實驗難點說明)理解UDP協(xié)議網(wǎng)絡(luò)通信時序建立簡易聊天程序(包括客戶端和服務(wù)端功能)網(wǎng)絡(luò)空間安全技術(shù)實踐教程49.3CSOCKET下基于UDP協(xié)議的通信編程實驗實驗準備:(實驗環(huán)境,實驗先有知識技術(shù)說明)操作系統(tǒng)windowsXP及以上VS2010以上開發(fā)環(huán)境網(wǎng)絡(luò)空間安全技術(shù)實踐教程5實驗步驟:1)理解數(shù)據(jù)報套接字編程時序基于UDP協(xié)議的網(wǎng)絡(luò)通信涉及兩個獨立的應(yīng)用程序?;跀?shù)據(jù)報套接字(UDP協(xié)議)的網(wǎng)絡(luò)通信時序如圖9-3-1所示。與圖9-1-1描述的流套接字不同,服務(wù)器和客戶端程序的數(shù)據(jù)報套接字的編程時序是完全一樣的。程序首先需要初始化SOCKET,接著綁定端口,然后進行收發(fā)信息的操作。9.3CSOCKET下基于UDP協(xié)議的通信編程實驗網(wǎng)絡(luò)空間安全技術(shù)實踐教程6實驗步驟:2)簡易聊天程序設(shè)計(1)新建工程打開一個VS2010,建立一個新的MFC工程。需要注意的有兩點:首先,在應(yīng)用類型界面需要選擇基于對話框的應(yīng)用,如圖9-3-2所示;其次,在高級選項界面要勾選“WindowsSocket”,如圖9-3-3所示,這樣在之后的Socket編程工作中,用到相關(guān)頭文件以及鏈接庫等開發(fā)環(huán)境時就不再需要手工添加了。建立成功后,進入ClassView,如圖9-3-4所示,可在主界面中根據(jù)功能設(shè)計好主對話框,如圖9-3-5所示。需要說明的是,該程序運行后,用戶就會看到界面顯示的主對話框,如果關(guān)閉該對話框,程序運行進程就終止了。9.3CSOCKET下基于UDP協(xié)議的通信編程實驗網(wǎng)絡(luò)空間安全技術(shù)實踐教程7實驗步驟:2)簡易聊天程序設(shè)計(2)為控件添加變量
右鍵點擊對話框,彈出菜單,如圖9-3-6所示。選擇ClassWizard,彈出對話框,如果添加變量,先點擊選擇一個控件ID,然后點擊右邊的“AddVariable”,輸入變量名,并且選擇變量類型,添加好變量后如圖9-3-7所示。程序代碼可以通過操作變量名來操作控件,方便編程。9.3CSOCKET下基于UDP協(xié)議的通信編程實驗網(wǎng)絡(luò)空間安全技術(shù)實踐教程8實驗步驟:2)簡易聊天程序設(shè)計(3)編寫發(fā)送功能代碼雙擊圖9-3-5中的“發(fā)送”按鈕,產(chǎn)生一個發(fā)送的函數(shù),進入代碼編輯頁面,添加代碼如下:voidCCChenSiCSocketDlg::OnBnClickedButton2(){ //TODO:Addyourcontrolnotificationhandlercodehere UpdateData(TRUE);//創(chuàng)建一個用來發(fā)送的socket CSocketsendsocket;//初始化 sendsocket.Create(0,SOCK_DGRAM,NULL); sendsocket.SendTo(m_sendcontent,m_sendcontent.GetLength(),m_remoteport,m_ipaddress,0);//直接發(fā)送,不需要連接 sendsocket.Close();//關(guān)閉socket}9.3CSOCKET下基于UDP協(xié)議的通信編程實驗網(wǎng)絡(luò)空間安全技術(shù)實踐教程9實驗步驟:2)簡易聊天程序設(shè)計(4)編寫接收功能代碼為了實現(xiàn)信息的接收,程序需要接收信息的Socket,故需要申明一個Socket。因此,在ClassView中的CChenSiCSocket上點擊右鍵調(diào)出菜單來(如圖9-3-8),選擇Add-Class...打開添加類的窗口,選擇MFCClass,如圖9-3-9所示。在添加類向?qū)е羞M行進一步設(shè)置,Classname取名為CRecvSocket,Baseclass選擇CSocket,點擊Finish,如圖9-3-10所示。接收Socket創(chuàng)建成功后,在ClassView中找到剛才所建的新類CRecvSocket,右鍵調(diào)出菜單點擊ClassWizard...,進入向?qū)Ш笳业絍irtualFunctions添加OnReceive(intnErrorCode)函數(shù),如圖9-3-11所示。9.3CSOCKET下基于UDP協(xié)議的通信編程實驗網(wǎng)絡(luò)空間安全技術(shù)實踐教程10實驗步驟:2)簡易聊天程序設(shè)計(4)編寫接收功能代碼雙擊ClassView界面中的OnReceive(intnErrorCode)進入代碼編輯頁面,找到“//TODO:Addyourspecializedcodehereand/orcallthebaseclass”后添加如下代碼:voidCRecvSocket::OnReceive(intnErrorCode){
//TODO:Addyourspecializedcodehereand/orcallthebaseclass charbuf[1024]; memset(buf,0,1024); ReceiveFrom(buf,1024,NULL,NULL,0); CStringc; c.Format("%s",buf); SendMessage(AfxGetMainWnd()->m_hWnd,MYMSG,0,(long)&c);//把接收到的內(nèi)容轉(zhuǎn)換類型以消息參數(shù)的形式發(fā)送到窗口 CSocket::OnReceive(nErrorCode);}9.3CSOCKET下基于UDP協(xié)議的通信編程實驗網(wǎng)絡(luò)空間安全技術(shù)實踐教程11實驗步驟:2)簡易聊天程序設(shè)計(4)編寫接收功能代碼代碼中有發(fā)送消息函數(shù)SendMessage,參數(shù)中有MYMSG,這是個宏定義,我們在“RecvSocket.cpp”文件最頂部添加一句:#defineMYMSGWM_USER+1,作用是定義一個自定義消息號,防止和系統(tǒng)消息混淆。自定義消息發(fā)送出去后要在窗口中處理,于是還需在CCChenSiCSockDlg類中添加一個自定義消息處理函數(shù),添加方法如下:雙擊ClassView中的CCChenSiCSockDlg類名,進入類的頭文件CChenSiCSocketDlg.h,在頭文件中添加自定義消息處理函數(shù)申明,位置如圖9-3-12所示。9.3CSOCKET下基于UDP協(xié)議的通信編程實驗網(wǎng)絡(luò)空間安全技術(shù)實踐教程12實驗步驟:2)簡易聊天程序設(shè)計(4)編寫接收功能代碼圖9-3-12中選中的函數(shù)名MyMessageDeal可以隨意取,但是參數(shù)和前綴不能變,前綴是afx_msgLRESULT。添加了函數(shù)申明以后,還需要進入CChenSiCSocketDlg.cpp文件,添加一個消息映射,位置如圖9-3-13所示。消息映射申明的形式如:ON_MESSAGE(消息號,自定義消息處理函數(shù))。接下來需要在CChenSiCSocketDlg.cpp文件中實現(xiàn)函數(shù)的功能代碼,參照其他函數(shù)形式,手動添加函數(shù),具體代碼如下:LRESULTCCChenSiCSocketDlg::MyMessageDeal(WPARAMwParam,LPARAMlParam){ //處理自定義消息 m_allcontent=m_allcontent+"\r\n"+*(CString*)lParam; UpdateData(FALSE); return0;}9.3CSOCKET下基于UDP協(xié)議的通信編程實驗網(wǎng)絡(luò)空間安全技術(shù)實踐教程13實驗步驟:2)簡易聊天程序設(shè)計(4)編寫接收功能代碼到目前為止僅僅定義了派生類,還沒有用到這個派生類的對象。要使用這個派生類的對象接收到數(shù)據(jù),首先需要綁定一個端口,所以,需要雙擊綁定按鈕,添加一個綁定函數(shù),具體代碼如下:voidCCChenSiCSocketDlg::OnBnClickedButton1(){ //TODO:Addyourcontrolnotificationhandlercodehere CRecvSocket*recvsocket; UpdateData(TRUE); recvsocket=newCRecvSocket();//創(chuàng)建一個socket if(!recvsocket->Create(m_localport,SOCK_DGRAM,NULL))//初始化綁定 SetDlgItemText(IDC_STATIC,"綁定失敗"); elseSetDlgItemText(IDC_STATIC,"綁定成功");}9.3CSOCKET下基于UDP協(xié)議的通信編程實驗網(wǎng)絡(luò)空間安全技術(shù)實踐教程14實驗步驟:2)簡易聊天程序設(shè)計(5)編譯程序編寫完成后,需要對代碼進行編譯,可以通過菜單或者工具欄按鈕完成操作。如果使用菜單,可以選擇Build-BuildCChenSiCSocket或者Build-BuildSolution,如圖9-3-14所示。如果使用工具欄,可以選擇如圖9-3-15所示的按鈕。9.3CSOCKET下基于UDP協(xié)議的通信編程實驗網(wǎng)絡(luò)空間安全技術(shù)實踐教程15實驗步驟:2)簡易聊天程序設(shè)計(5)編譯程序如果編譯完全成功,確保無語法錯誤時,會在Output中顯示“Build:1succeed,0failed...”,如圖9-3-16所示;如果編譯存在錯誤,會顯示在ErrorList中,如圖9-3-17所示,編譯器提示發(fā)生了很多編譯錯誤,經(jīng)查證,是因為沒有在CChenSiCSocketDlg.cpp中引用CRecvSocket所需要的頭文件,即#include"RecvSocket.h",增加后即可編譯成功。9.3CSOCKET下基于UDP協(xié)議的通信編程實驗網(wǎng)絡(luò)空間安全技術(shù)實踐教程16實驗步驟:3)運行程序?qū)崿F(xiàn)簡易通信
編譯成功后,可以通過菜單或者工具欄按鈕來運行完成的程序。在編譯成功的前提下,如果使用菜單,其中一種方法是選擇Debug-StartDebugging,如圖9-3-18所示;如果使用工具欄,可以選擇如圖9-3-19所示的按鈕。正常運行時,會顯示MFC項目中所設(shè)計的主對話框,然后依據(jù)所編寫的程序進行操作,完成需要的功能。由于本實驗中的應(yīng)用程序同時包含服務(wù)器和客戶端程序的功能,所以需要同時運行兩個程序,一個作為通信者Alice,一個作為通信者Bob,如圖9-3-20所示。9.3CSOCKET下基于UDP協(xié)議的通信編程實驗網(wǎng)絡(luò)空間安全技術(shù)實踐教程17實驗步驟:3)運行程序?qū)崿F(xiàn)簡易通信
由于該程序中既包括服務(wù)器端功能又包括客戶端功能,同時還在同一機器上運行,所以兩個程序中對方IP可直接填“127.0.0.1”。在運行時,首先用戶作為Alice,使用圖9-3-20中右邊的聊天程序,要選定一個能夠接收信息的本地端口進行綁定,所以先輸入本地端口(例如:9999),點擊綁定;在看到綁定成功的提示后,用戶接著作為Bob,在左邊的聊天程序中左下角的編輯框里輸入想要發(fā)送的信息(例如:Hello,Alice!),并在對方端口一欄中輸入Alice所綁定的端口(例如:9999),在對方IP處輸入正確的IP(例如:127.0.0.1),點擊發(fā)送,即可在Alice左上角的編輯框里顯示出接收到的信息(例如:Hello,Alice?。\行結(jié)果如圖9-3-21所示。9.3CSOCKET下基于UDP協(xié)議的通信編程實驗網(wǎng)絡(luò)空間安全技術(shù)實踐教程18實驗步驟:3)運行程序?qū)崿F(xiàn)簡易通信
與此同時,Alice也可以對Bob發(fā)送信息,操作方法與上面所講相同。首先用戶作為Bob,需要先綁定接收信息的本地端口(例如:6666),需要注意的是這個端口必須與Alice所綁定的端口不同;在綁定成功后,用戶接著作為Alice,在發(fā)送框里輸入信息(例如:Hello,Bob?。?,并在對方端口一欄中輸入Bob所綁定的端口(例如:6666),在對方IP處輸入正確的IP(例如:127.0.0.1),點擊發(fā)送,即可在Bob的接收框里顯示出接收到的信息(例如:Hello,Bob!),如圖9-3-22所示。需要注意的是,當兩個聊天程序都想綁定同一個端口時,后綁定的會綁定失敗,如圖9-3-23所示。Bob發(fā)送的信息可以成功的被Alice接收,而Alice發(fā)送的
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024-2030年中國威士忌市場銷售渠道與營銷趨勢預(yù)測報告
- 2024年獨家:影視作品版權(quán)許可使用協(xié)議
- 2024年特許經(jīng)營合同實務(wù)操作
- 2024年版企業(yè)間技術(shù)咨詢合同
- 茅臺學(xué)院《公共關(guān)系案例精講》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024年智能監(jiān)控系統(tǒng)設(shè)備安裝協(xié)議版B版
- 2024年度內(nèi)河化學(xué)品運輸安全責任合同模板下載3篇
- 2024年生態(tài)農(nóng)業(yè)自建房產(chǎn)權(quán)轉(zhuǎn)移協(xié)議3篇
- 2025廢品回收合同
- 2024年標準電腦維修服務(wù)承諾合同范本版B版
- 2023年正規(guī)借條免費下載(5篇)
- 網(wǎng)絡(luò)創(chuàng)業(yè)智慧樹知到答案章節(jié)測試2023年海南經(jīng)貿(mào)職業(yè)技術(shù)學(xué)院
- 高中英語新課標新增詞匯匯總1
- GB/T 31586.2-2015防護涂料體系對鋼結(jié)構(gòu)的防腐蝕保護涂層附著力/內(nèi)聚力(破壞強度)的評定和驗收準則第2部分:劃格試驗和劃叉試驗
- GB/T 20734-2006液化天然氣汽車專用裝置安裝要求
- GB/T 20197-2006降解塑料的定義、分類、標志和降解性能要求
- GB/T 15561-2008靜態(tài)電子軌道衡
- 軍事理論論述題
- 寧德時代財務(wù)報表分析
- 門式起重機安裝施工方案
- 高中語文語法知識課件
評論
0/150
提交評論