




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、CAsyncSocket類的應用實例是一個簡單的聊天室程序,它采用C/S模式,分為客戶端程序和服務器程序。因為服務器只能支持一個客戶端,所以它實際上是一個點對點通信程序??蛻舳顺绦蚝头掌鞒绦蛲ㄟ^網(wǎng)絡交換聊天字符串內(nèi)容,并將其顯示在窗口的列表框中。1、示例程序的技術要點:如何從CAsyncSocket類中導出您的WinSock類。理解WinSock類和應用程序框架之間的關系。重點學習流套接字對象的使用。處理網(wǎng)絡事件的方法。這個例子很簡單,但它可以解釋網(wǎng)絡編程的許多問題。下面詳細描述了MFC編程的細節(jié)。2,創(chuàng)建客戶端程序,1使用MFC AppWizard創(chuàng)建服務器端應用程序框架。2為對話框界面添
2、加控件對象3為對話框中的控件對象定義相應的成員變量4創(chuàng)建從CAsyncSocket繼承的派生類5為對話框添加控件對象事件的響應函數(shù)類6為CTalkcDlg對話框添加其他成員函數(shù)和成員變量類8手動添加代代碼3、創(chuàng)建一個客戶端應用程序,并使用對話框體系結構1使用MFC AppWizard創(chuàng)建一個客戶端應用程序框架。(1)在新建對話框中,選擇項目卡,如圖所示。選擇MFC應用程序向導(exe),在項目名稱中填寫項目名稱Talkc,并在位置中選擇存儲該項目的目錄。然后單擊確定按鈕。4、(2)出現(xiàn)MFC應用程序向導步驟1對話框,如圖所示。選擇基于對話框的應用類型,并且語言支持選擇中文(中國),這樣這個項目
3、可以正確地輸入,輸出,顯示和處理中文。然后單擊下一步按鈕。5、(3)出現(xiàn)MFC應用程序向導步驟2(共4步)對話框,如圖所示,并在窗口套接字復選框上放置一個選擇標記,表示應用程序將支持WinSock套接字。接受其他默認設置。跳過以下步驟,直接單擊Finsh按鈕。6、(4)出現(xiàn)“新建項目信息”對話框,解釋有關創(chuàng)建的骨架項目的信息。如圖所示。所創(chuàng)建的程序是一個基于對話框的Win32應用程序,它會自動創(chuàng)建兩個類:應用類CTalkcApp,對應的文件是talkc.h和talkc.cpp;對話框類CTalkcDlg,對應的文件是talkcDlg.h和talkcDlg.cpp支持Windows Socket
4、使用共享動態(tài)鏈接庫實現(xiàn)MFC42.DLL。7、2向對話框界面添加控件對象創(chuàng)建應用程序框架后,可以排列程序的主對話框。在MFC界面左側的工作區(qū)中選擇資源視圖卡,從中選擇對話框,雙擊IDD _ TALKC _ DIALOG,對話框和控制面板將出現(xiàn)在右側。使用控制面板,可以很容易地在程序的主對話框界面添加相應的可視化控制對象,如圖所示。8、在主對話框中添加控件,并根據(jù)下表修改對話框中的控件屬性。圖Talkc程序主對話框,10,在Talkc程序主對話框中表控件屬性,11、3在對話框中為控件對象定義相應的成員變量,點擊窗口菜單中的查看/創(chuàng)建類向導,進入類向導對話框,如圖所示。12、選擇成員變量卡,并使用
5、類向導為對話框中的控件對象定義相應的成員變量。確認類名為CTalkcDlg,在左側列表框中選擇一個控件,點擊“添加變量”按鈕,彈出“添加成員變量”對話框,如圖所示,然后根據(jù)表格輸入。用于添加控制成員變量的圖對話框,13,對應于客戶端程序對話框中的控制對象的表成員變量,14,定義一個枚舉變量IDD,值為IDD _ TALKC _ DIALOG。此對話類通過此IDD建立與對話資源的聯(lián)系。、15、ctalkcdlg類的構造函數(shù)、類向導生成的對話框控件和相應控件變量的映射語句將控件標識與類的成員變量相匹配,以及16、4創(chuàng)建一個從CAsyncSocket類繼承的派生類(1)為了捕獲和響應套接字事件,您應
6、該創(chuàng)建自己的套接字類,它應該從CAsyncSocket類派生并傳遞套接字事件。選擇菜單“插入/分類”進入“新建分類”對話框,如圖所示。圖中添加自己的套接字類,17,選擇或輸入如下信息:類類型:在MFC類類信息下選擇名稱:在CMySocket類信息下輸入基類:選擇CAsyncSocket,點擊“確定”按鈕,系統(tǒng)會自動生成CMySocket類對應的包含文件MySocket.h和MySocket.cpp。你可以在VC界面的類視圖中看到這個類。18、定義CMySocket類,CMySocket的構造函數(shù),cmysocket的析構函數(shù),20、(2)使用ClassWizard classwizard為此套
7、接字類添加事件處理成員函數(shù)。單擊菜單視圖/類向導.要進入類別向導對話框,請選擇“消息映射”卡,確認類別名稱為“事件”,從“消息”列中選擇事件消息,然后單擊“添加功能”按鈕,您將看到相應的事件處理功能已添加到“成員功能”列中。如圖所示,程序需要添加三個函數(shù):OnConnect、OnClose和OnReceive。在這一步中,這些函數(shù)的聲明將在CMySocket類的MySocket.h中自動生成,這些函數(shù)的框架和相關的消息映射代碼將在MySocket.cpp中生成.請參見以下程序列表。21,圖為事件處理成員函數(shù),用于向套接字類添加響應消息,22,23,(3)向套接字類添加通用成員函數(shù)和成員變量在V
8、C界面,選擇工作區(qū)窗口中的類視圖卡,右鍵單擊CMySocket類,彈出快捷菜單。選擇添加成員函數(shù),為此類添加成員函數(shù);選擇添加成員變量為此類添加成員變量。24、向這個套接字類添加一個私有成員變量:對話框類的指針。private: CTalkcDlg * m _ pDlg圖中顯示了向套接字類25、添加通用成員變量,然后添加一個成員函數(shù):void SetParent(CTalkCDLG * PDLG);這一步還將在MySocket.h中生成變量或函數(shù)的聲明,并在MySocket.cpp中生成函數(shù)的框架代碼如果您熟悉它,這一步的代碼也可以直接手工添加。在VC界面手工增加其他代碼,在工作區(qū)窗口選擇文件
9、查看卡,雙擊需要編輯的文件,該文件的代碼會顯示在右邊窗口,可以編輯和增加。對于MySocket.h,這個應用程序對話框類的聲明應該添加在文件的開頭。CTalkcDlg類;27,對于MySocket.cpp,有四個添加:在文件的開頭,添加包含文件的描述。這是因為這個套接字類使用了對話框類的變量。#在構造函數(shù)中包含“talkcdlg.h ”,添加對話框指針成員變量的初始化代碼:cmysocket:cmysocket()m _ pdlg=null;在析構函數(shù)中,為對話指針成員變量添加終止處理代碼:cmy socket:cmy socket()m _ pdlg=null;為連接、丟失和接收上的成員函數(shù)
10、集父函數(shù)和事件處理函數(shù)添加代碼。有關詳細信息,請參見以下程序列表。28、5為對話框類的控件對象事件添加響應函數(shù)根據(jù)該表,使用類向導為對話框中的控件對象添加事件響應函數(shù)。主要用于處理三個按鈕的點擊事件,如圖所示。其他功能是原創(chuàng)的。表為對話框中的控件對象添加了事件響應函數(shù),圖29、顯示了為對話框類添加控件事件處理函數(shù)。在這一步中,這三個事件處理函數(shù)的聲明將在talkcDlg.h中自動添加,消息映射的代碼和這三個函數(shù)的框架代碼將在talkcDlg.cpp中生成。、30、6將其他成員函數(shù)和成員變量添加到CTalkcDlg對話框類:/用于連接服務器的套接字。成員函數(shù):void OnClose();/用于
11、處理與服務器的通信。OnConnect()無效;在接收時無效();31、7手動添加的代碼在CTalkcDlg對話框類的talkcDlg.h中添加了MySocket.h的include命令。要獲得套接字支持:# include mysocket。h 在CTalkcDlg對話框類的talkcDlg.cpp中添加控制變量的初始化代碼:/todo :在此處添加額外的初始化/初始化代碼boolctalkCDLG : initdialog()m _ strsvname= 127 . 0 . 0 . 1 ;m _ nServPort=1000/服務端口=1000更新數(shù)據(jù)(假);/更新用戶界面/設置套接字類的
12、對話指針成員變量m _ sconnection . set parent(this );32、8主要在CTalkcDlg對話類的talkcDlg.cpp和CMySocket類的Mysocket.cpp中添加事件函數(shù)和成員函數(shù)的代碼。應該注意的是,這些函數(shù)的框架已經(jīng)由VC向導在前面的步驟中生成,所以您只需要填寫用戶自己的代碼。9用于測試。測試應該逐步進行。在上述步驟中,您可以嘗試編譯和執(zhí)行每個步驟。33、3客戶端程序的類和消息驅動程序的關系,34、客戶端類和消息驅動程序,程序運行后,程序被初始化,然后向用戶顯示對話框,然后進入消息循環(huán),通過消息觸發(fā)相應類的事件處理函數(shù)的執(zhí)行,從而完成程序的功能。
13、消息主要有兩種類型:套接字類從網(wǎng)絡接收消息;來自用戶操作對話框的對話框類消息。由m_sConnectSocket變量表示的CMySocket套接字對象接收來自網(wǎng)絡的套接字事件消息,并執(zhí)行相應的對象處理函數(shù),這些函數(shù)實際上并不做任何事情,而是調(diào)用對話類的相應成員函數(shù),這些函數(shù)完成發(fā)送鏈接請求、接收數(shù)據(jù)和關閉連接的任務。35、套接字類的相應成員函數(shù)就像一個信使,向對話類報告情況。在對話框類中處理的原因:該操作涉及到對話框中的許多變量和控制變量,因此通過對話框類的成員函數(shù)來處理它們既方便又直接。套接字類的成員變量m_pDlg是一個指向對話類的指針,它在消息傳輸中起著關鍵作用。用戶直接面對對話框,可以
14、直接操作對話框中的控件,如輸入服務器名稱、輸入端口號等。當用戶點擊按鈕時,將生成一條事件消息,并執(zhí)行相應的處理功能。36、4客戶端程序主要功能編碼及分析1應用類CTALKCPP對應文件應用類CTALKCPP,對應文件為talkc.h和talkc.cpp;Talkc.h定義了CTalkcApp類,而talkc.cpp是該類的實現(xiàn)代碼,完全由VC自動創(chuàng)建,用戶無需做任何修改。對應于從2派生的套接字類CMySocket的文件CMySocket類對應于MySocket.h頭文件和MySocket。其他文件:VC為talkc項目創(chuàng)建的其他文件,如stdafx.h和stdafx.cpp、Resource.
15、h和talkc.rc,不需要任何處理。38、5使用可視化語言的集成開發(fā)環(huán)境創(chuàng)建服務器端程序,以創(chuàng)建服務器端應用程序框架。具體步驟如下:1 .使用MFC AppWizard創(chuàng)建服務器端應用程序框架。2為對話框界面添加控制對象3為對話框中的控制對象定義相應的成員變量4創(chuàng)建從CAsyncSocket繼承的派生類5為對話框添加控制對象事件的響應函數(shù)類6為CTalksDlg對話框添加其他成員函數(shù)和成員變量類7手動添加代碼8添加事件函數(shù)和成員函數(shù)的代碼9進行測試。、39、40、41、42、43、44、個成員變量對應的對話框中的控制對象,創(chuàng)建類似CMySocket的,并添加三個事件處理函數(shù),45、5主要用于三個按鈕的點擊事件處理。46
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 山東省普通高中2025屆高一下化學期末考試模擬試題含解析
- 江西省八所重點中學2025屆化學高一下期末達標檢測試題含解析
- 內(nèi)蒙獻血休假管理辦法
- 查賬專業(yè)團隊管理辦法
- 促進農(nóng)業(yè)資金管理辦法
- 河洛英才資金管理辦法
- 醫(yī)療公司合同管理辦法
- 培訓機構協(xié)議管理辦法
- 供電服務品質管理辦法
- 異常地圖數(shù)據(jù)檢測-洞察及研究
- 心肺復蘇課件
- 2025至2030全球及中國企業(yè)文件共享和同步(EFSS)行業(yè)產(chǎn)業(yè)運行態(tài)勢及投資規(guī)劃深度研究報告
- 上海金山區(qū)屬國有企業(yè)招聘筆試真題2024
- 2025至2030中國碳化硅陶瓷膜行業(yè)發(fā)展趨勢分析與未來投資戰(zhàn)略咨詢研究報告
- 2025至2030中國生石灰行業(yè)市場深度調(diào)研及發(fā)展趨勢與投資方向報告
- 一通三防管理課件
- 2025秋二年級上冊語文上課課件 2 我是什么
- 胖東來總值班管理制度
- 口腔診室終末消毒流程
- 2024年廣州市荔灣區(qū)社區(qū)專職招聘考試真題
- 切口感染案例分析
評論
0/150
提交評論