freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于vc的企業(yè)內(nèi)部通信軟件的設(shè)計(jì)與實(shí)現(xiàn)計(jì)算機(jī)優(yōu)秀畢業(yè)論文-在線瀏覽

2024-08-07 18:49本頁(yè)面
  

【正文】 Socket類編程模型使用CSocket對(duì)象涉及CArchive和CSocketFile 類對(duì)象。 (1)構(gòu)造一個(gè)CSocket對(duì)象。在客戶方程序中,除非需要數(shù)據(jù)報(bào)套接字,Create()函數(shù)一般情況下應(yīng)該使用默認(rèn)參數(shù)。需要注意的是,Carchive類對(duì)象不能與數(shù)據(jù)報(bào)(UDP)套接字一起工作,因此對(duì)于數(shù)據(jù)報(bào)套接字,CAsyncSocket和CSocket 的使用方法是一樣的。請(qǐng)注意Accept()成員函數(shù)需要一個(gè)新的并且為空的CSocket對(duì)象作為它的參數(shù),解釋同上。(5)為接收和發(fā)送數(shù)據(jù)各產(chǎn)生一個(gè)CArchive 對(duì)象,把它們與CSocketFile對(duì)象關(guān)聯(lián)起來(lái)。 (6)使用CArchive對(duì)象的Read()、Write()等函數(shù)在客戶與服務(wù)方傳送數(shù)據(jù)?!?Sockets程序開(kāi)發(fā)的技術(shù)要點(diǎn)(1)同常規(guī)編程一樣,無(wú)論服務(wù)器方還是客戶方應(yīng)用程序都要進(jìn)行所謂的初始化處理,這部分工作仍可采用消息驅(qū)動(dòng)機(jī)制來(lái)先期完成。在單獨(dú)調(diào)試網(wǎng)絡(luò)通信程序時(shí),要盡量與采用該通信模塊的其它應(yīng)用程序開(kāi)發(fā)者約定好,統(tǒng)一采用一種界面形式,即單文檔界面SDI、多文檔界面MDI和基于對(duì)話框界面中的一種(這在使用AppWizard形成項(xiàng)目[Project]文件時(shí)有提示),盡管這并非必須,但可使通信模塊在移植到所需的應(yīng)用程序時(shí)省時(shí)省力,因?yàn)閂isual C++ ,也給我們帶來(lái)某些不便,譬如所形成的項(xiàng)目文件中的許多相關(guān)文件與所采用的界面形式密切聯(lián)系,許多消息驅(qū)動(dòng)功能,隨所采用的界面形式不同而各異。 (3)以通信程序作為其中一個(gè)模塊的應(yīng)用程序往往不是在等待數(shù)據(jù)發(fā)送或接收完之后再做其它工作,因而在主程序中要采用多線程(Multithreaded)技術(shù)。Visual C++ 、管理線程、同步化線程、終止線程等功能函數(shù)。在這段時(shí)間內(nèi) ,要進(jìn)行如下工作:接收數(shù)據(jù),利用收到的數(shù)據(jù)進(jìn)行運(yùn)算,將運(yùn)算結(jié)果發(fā)送到其它計(jì)算機(jī)節(jié)點(diǎn),周而復(fù)始。 TCP/IP協(xié)議概述TCP/IP協(xié)議(Transfer Control Protocol/Internet Protocol)指?jìng)鬏斂刂?網(wǎng)絡(luò)協(xié)議,又叫網(wǎng)絡(luò)通訊協(xié)議。TCP/IP協(xié)議是包括上百個(gè)協(xié)議,其中包括很多功能:TCP(Transfer Control Protocol)傳輸控制協(xié)議,IP(Internet Protocol)互聯(lián)網(wǎng)協(xié)議,UDP(User Datagram Protocol)用戶數(shù)據(jù)報(bào)協(xié)議,ICMP(Internet Control Message Protocol)互聯(lián)網(wǎng)控制信息協(xié)議,F(xiàn)TP(File Transfer Protocol)文件傳輸協(xié)議,SMTP(Simle Mail Transfer Protocol)簡(jiǎn)單郵件傳輸協(xié)議,SNMP(simle Network Manage Protocol)簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議,ARP(Address Resolution Protocol)地址解析協(xié)議等。每一層負(fù)責(zé)不同的功能:(1)鏈路層,通常包括操作系統(tǒng)中的設(shè)備驅(qū)動(dòng)程序和計(jì)算機(jī)中對(duì)應(yīng)的網(wǎng)絡(luò)接口。(2)網(wǎng)絡(luò)層,即互聯(lián)網(wǎng)層,通常處理分組網(wǎng)絡(luò)中的活動(dòng),例如分組的路由選擇。(3)運(yùn)輸層,為兩臺(tái)主機(jī)上的應(yīng)用程序提供點(diǎn)對(duì)點(diǎn)活端到端的通信。TCP為兩臺(tái)主機(jī)提供高可靠性的數(shù)據(jù)通信。而UDP則為應(yīng)用層來(lái)提供。幾乎各種不同的TCP/IP實(shí)現(xiàn)都會(huì)提供下面這些通用的應(yīng)用程序。文本和圖片聊天是聊天軟件最基礎(chǔ)的功能。這樣,兩個(gè)用戶之前就可以實(shí)現(xiàn)通信了。(2)用戶端文件傳輸?shù)墓δ埽脩糁g可以斷點(diǎn)續(xù)傳文件。如果沒(méi)有傳完,下次就可以繼續(xù)打開(kāi)這個(gè)信息文件,接著上次的進(jìn)度傳輸。(3)用戶端之間白板和聊天室的功能,這個(gè)功能有些類似遠(yuǎn)程會(huì)議內(nèi)容的傳輸,研究目的是為了滿足企業(yè)內(nèi)部隨時(shí)性小會(huì)議室的要求。(4)用戶之間后臺(tái)的連接,每個(gè)用戶隔指定一段時(shí)間會(huì)向用戶列表中的每一用戶發(fā)送消息,查看用戶是否在線,如果不在線,就更新用戶列表,刪除用戶。在控件上顯示時(shí)格式化,更易于用戶的查看自己發(fā)送或接收到的信息。服務(wù)器端存放在適當(dāng)?shù)目臻g中,在發(fā)送給客戶端時(shí),對(duì)信息列表進(jìn)行格式化,便于客戶端提取信息。包括客戶端剛剛啟動(dòng)時(shí)的初始化信息和在使用過(guò)程中的確認(rèn)在線信息?!⌒阅苄枨蠓治觯?)可靠性高,能在由于系統(tǒng)問(wèn)題或其它原因產(chǎn)生錯(cuò)誤后,作出相對(duì)應(yīng)處理,比如網(wǎng)絡(luò)初始化失敗、服務(wù)器不在線等,可以提示用戶安全退出本程序,在出現(xiàn)不可知的錯(cuò)誤以后,可以盡量安全的退出程序。(2)宜操作性,程序簡(jiǎn)單易懂,容易上手使用。(3)開(kāi)發(fā)文檔易理解,保證以后自己二次開(kāi)發(fā)或他人接手開(kāi)發(fā)時(shí),能夠清晰的理解整個(gè)系統(tǒng)的設(shè)計(jì)思路和實(shí)現(xiàn)細(xì)節(jié)?!∵\(yùn)行需求分析(1)用戶界面程序較小,啟動(dòng)速度快,無(wú)啟動(dòng)界面。(2)故障處理在遇到可預(yù)知的故障與情況時(shí),能提示用戶并自動(dòng)退出;在遇到不可預(yù)知的故障時(shí)能安全退出。如果問(wèn)題沒(méi)有可行的解釋,分析員應(yīng)該建議停止這項(xiàng)開(kāi)發(fā)工程,以避免時(shí)間、資源、人力和金錢的浪費(fèi)。而且對(duì)自身的經(jīng)濟(jì)要求也不高,只要有一臺(tái)到兩臺(tái)可開(kāi)發(fā)程序軟件的電腦便可,所以不用考慮到經(jīng)濟(jì)問(wèn)題。 運(yùn)行可行性分析 本軟件為一個(gè)小型的基于局域網(wǎng)的通信軟件,所耗費(fèi)的資源是非常小的,現(xiàn)在一般的電腦無(wú)論是硬件還是軟件都能夠滿足條件,因此,本軟件在運(yùn)行上是可行的。第一,介紹本軟件的概要設(shè)計(jì)。詳細(xì)設(shè)計(jì)是先從基本框架的設(shè)計(jì)出發(fā),然后逐步介紹好友管理模塊、聊天模塊、聊天室模塊、傳送文件模塊、白板模塊?!「乓O(shè)計(jì)根據(jù)以上的軟件需求分析,可對(duì)本軟件進(jìn)行如下的功能模塊劃分,總體功能如圖41所示。本模塊目的是為兩個(gè)用戶提供基本的聊天環(huán)境。本模塊目的是為多個(gè)用戶提供基本的聊天環(huán)境。這個(gè)白板就是一個(gè)畫(huà)板,多個(gè)用戶建立連接之后,可通過(guò)此白板模塊達(dá)到信息共享的目的。(4) 傳輸文件模塊:用戶端文件傳輸?shù)墓δ?,使用戶之間可以進(jìn)行文件傳輸。(5)用戶之間后臺(tái)的連接,每個(gè)用戶隔指定一段時(shí)間會(huì)向用戶列表中的每一用戶發(fā)送消息,查看用戶是否在線,如果不在線,就更新用戶列表,刪除用戶?!『旰蛿?shù)據(jù)結(jié)構(gòu)的定義程序中用到了很多宏和數(shù)據(jù)結(jié)構(gòu),這些宏和數(shù)據(jù)結(jié)構(gòu)在多個(gè)模塊中都有用到,此頭文件里是程序中很多的宏和數(shù)據(jù)結(jié)構(gòu)的定義?!〕绦蚺渲梦募绦蛑泻芏嘈畔⑿枰4?,比如用戶名和熱鍵,因些程序用到了配置文件?!≌{(diào)試模塊為了方便調(diào)試,在程序中添加了一個(gè)用于調(diào)試的類CDebug,它具有的成員變量和成員函數(shù)如下:class CDebug {private: CString m_strMessage。 CDebug( CString strMessage )。}。 CString strTrace。 TRACE( strTrace )。 strTrace = run out : + m_strMessage + \n。}利用類的構(gòu)造、析構(gòu)函數(shù)和類的生命周期,我們可以很方便的設(shè)計(jì)如上的CDebug類,用法如下:{ CDebug debug( “test” )。  主界面初始化用過(guò)的人都知道,主面板總是處于其他程序的上面,而且在任務(wù)欄沒(méi)有圖標(biāo),而是把圖標(biāo)放到了托盤(pán)區(qū),另外,我們還可以按Ctrl+Alt+Z默認(rèn)的快捷鍵隱藏和顯示主面板。本設(shè)計(jì)也不例外,同樣也要達(dá)到這樣的目的。( IDD_DIALOG_BG )。CInstantMessagingDlg dlg( amp。m_pMainWnd = amp。ModifyStyleEx( WS_EX_APPWINDOW, 0 )。首先,我們創(chuàng)建一個(gè)對(duì)話框,并隱藏此對(duì)放框,然后把這個(gè)對(duì)話框作為主界面對(duì)話框的父窗口,然后在主界面對(duì)話框的初始化函數(shù)中修改其風(fēng)格,去掉WS_EX_APPWINDOW風(fēng)格。(2)將主界面放在最上層將程序放到頂層,很多程序都有這功能,比如金山詞霸等,實(shí)現(xiàn)起來(lái)其實(shí)很簡(jiǎn)單,只用一條語(yǔ)句就可以達(dá)到目的:SetWindowPos( amp。第一個(gè)參數(shù)就是將程序放到所有非頂層窗口的頂層,如果有多個(gè)程序都是頂層窗口,那么他們誰(shuí)在上面,就要看當(dāng)前誰(shuí)是激活的窗口。(3)熱鍵的處理設(shè)計(jì)中默認(rèn)的熱鍵是Ctrl+Alt+Z,當(dāng)然程序允許用戶自己定義熱鍵。::RegisterHotKey( m_hWnd, IDHOTKEY, m_wModifiers, m_wVirtualKeyCode )。注冊(cè)成功后,如果按熱鍵,那么程序就會(huì)接受到WM_HOTKEY消息,因此我們還需要自己處理WM_HOTKEY消息:void OnHotkey( WPARAM wParam, LPARAM lParam )。void CInstantMessagingDlg::OnHotkey( WPARAM wParam, LPARAM lParam ){ if( thisIsWindowVisible() ) { ShowWindow( SW_HIDE )。 ::SetForegroundWindow( m_hWnd )。(4)最小化和關(guān)閉按鈕的處理我們希望單擊程序右上角的最小化按鈕時(shí),程序隱藏起來(lái),而單擊關(guān)閉按鈕時(shí),程序會(huì)提示是否退出,而不會(huì)悄無(wú)聲息的退出。 } else { CDialog::OnSysCommand(nID, lParam)。 }}在程序中處理OnSysCommand()函數(shù)和OnCancel ()函數(shù)就實(shí)現(xiàn)了我們要的功能。實(shí)現(xiàn)托盤(pán)圖標(biāo)的代碼如下:NOTIFYICONDATA m_nid。 = hIcon。 = sizeof( NOTIFYICONDATA )。 = NIF_ICON | NIF_MESSAGE | NIF_TIP。sprintf( , 即時(shí)聊天軟件 )。m_nid )。如果你們對(duì)圖標(biāo)有單擊和雙擊等操作,程序會(huì)收到WM_SHELLNOTIFY消息,因此,我們還必須處理WM_SHELLNOTIFY消息。BEGIN_MESSAGE_MAP(CInstantMessagingDlg, CDialog) //{{AFX_MSG_MAP(CInstantMessagingDlg) … ON_MESSAGE( WM_SHELLNOTIFY, OnShellNotifyProc ) … //}}AFX_MSG_MAPEND_MESSAGE_MAP()void CInstantMessagingDlg::OnShellNotifyProc( WPARAM wParam, LPARAM lParam ){ if( lParam == WM_LBUTTONDBLCLK ) { … } else if( lParam == WM_RBUTTONUP ) { … }}與熱鍵處理一樣,OnShellNotifyProc()函數(shù)響應(yīng)我們對(duì)圖標(biāo)的操作,其中l(wèi)Param參數(shù)表示消息號(hào),在本設(shè)計(jì)中只處理左鍵雙擊(顯示主界面)和右鍵單擊(彈出菜單)。void CInstantMessagingDlg::OnDestroy() { /// 刪除在托盤(pán)建立的圖標(biāo) ::Shell_NotifyIcon( NIM_DELETE, amp。 CDialog::OnDestroy()。(6)只允許運(yùn)行唯一實(shí)例這點(diǎn)與不同,在一臺(tái)機(jī)子上可以運(yùn)行多個(gè),但本程序只允許運(yùn)行一個(gè)實(shí)例。if( hEvent ){ if( ERROR_ALREADY_EXISTS == GetLastError() ) { return FALSE。當(dāng)首次運(yùn)行程序時(shí),會(huì)創(chuàng)建一個(gè)名為“InstantMessaging”的事件,這個(gè)事件在系統(tǒng)范圍內(nèi)有效,當(dāng)再次運(yùn)行程序時(shí),程序會(huì)嘗試著創(chuàng)建同名的事件,因?yàn)橹耙呀?jīng)創(chuàng)建了這個(gè)事件,因此系統(tǒng)會(huì)返回之前創(chuàng)建事件的句柄,但GetLastError()會(huì)返回ERROR_ALREADY_EXISTS,表明需創(chuàng)建的事件之前已經(jīng)創(chuàng)建,為了保證只允許一個(gè)實(shí)例,這個(gè)實(shí)例就不再允許運(yùn)行,直接返回,退出程序。圖41 主界面左上角顯示的是自己的頭像、狀態(tài)和昵稱;右上角的列表框是查找IP輸入框,下面是添加按鈕;在下面一點(diǎn)的列表框是自己的址列表框,顯示了自己的所有IP;主界面中央是用戶列表框;最下面是4個(gè)功能按鈕。有兩種方式添加聯(lián)系人:(1)在右上解的查找IP輸入框里輸入IP,然后單擊下面的添加按鈕。程序允許保存10個(gè)最近聯(lián)系人的IP,當(dāng)新添加聯(lián)系人時(shí),如果已保存了10個(gè)聯(lián)系人的IP,程序會(huì)按照時(shí)間的先后順序覆蓋之前的IP。(2)選定一個(gè)自己的IP,然后單擊“網(wǎng)段”按鈕。在主界面任何地點(diǎn)單擊左鍵不放開(kāi),可以拖動(dòng)程序;單擊右鍵,會(huì)彈出菜單,用戶選中相應(yīng)的菜單項(xiàng),可以執(zhí)行相應(yīng)的功能;在任何地點(diǎn)雙擊左鍵,可以打開(kāi)“個(gè)人設(shè)置”對(duì)話框,如圖42所示。單擊保存后。在主界面,添加、聊天室、傳送文件和白板按鈕都是自繪按鈕,可以顯示圖片,有提示能力,當(dāng)鼠標(biāo)移動(dòng)到其上一會(huì)兒后,會(huì)彈出提示框,而且這些按鈕都具有XP風(fēng)格,既鼠標(biāo)滑過(guò)時(shí)會(huì)顯示不同的狀態(tài)。自繪按鈕和自繪列表框會(huì)作為一個(gè)單獨(dú)的模塊來(lái)介紹,這兒就不作過(guò)多的介紹。在程序的主界面上,主要的按鈕都采用了自繪按鈕,而不使用自帶的按鈕控件。在自繪按鈕類中定義了如下成員變量:int m_nState。 /// 正常圖標(biāo)CBitmap m_bmpHover。 /// 按下圖標(biāo)CBitmap m_bmpDisable。 /// 提示類m_nState表示當(dāng)前按鈕的狀態(tài),可以為宏:NORMAL,HOVER,DOWN,DISABLE,分別表示按鈕正常狀態(tài)、處于焦點(diǎn)狀態(tài)、按下?tīng)顟B(tài)、無(wú)效狀態(tài),這4個(gè)宏的定義在實(shí)現(xiàn)文件。m_pToolTipCtrl是提示工具控件類,既是鼠標(biāo)在其上時(shí),會(huì)彈出提示窗口。重載PreSubclassWindow(),在這個(gè)函數(shù)中更改按鈕風(fēng)格并初始化m_pToolTipCtrl。 CButton::PreSubclassWindow()。 ( 100 )。 GetWindowText( strText )。 }VC++,只能為
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1