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-07-28 18:49上一頁面

下一頁面
  

【正文】 第2章 相關(guān)技術(shù)概述 開發(fā)環(huán)境本節(jié)主要介紹本軟件系統(tǒng)的開發(fā)環(huán)境,以及運(yùn)用的編程工具等。使用MFC,可以在任何時候調(diào)用Win32函數(shù)、最大程度地利用Windows。運(yùn)行組件:Windows Sockets 應(yīng)用程序接口的動態(tài)鏈接庫()。 開發(fā)Windows Sockets網(wǎng)絡(luò)通信程序的軟、硬件環(huán)境所采用的操作系統(tǒng)軟件可以是Windows XP,Windows 7,因?yàn)樗鼈兌贾С諻indows Sockets API,在以下的介紹中,我們將以在Windows XP環(huán)境下的開發(fā)為例。Windows Sockets API則可直接與TCP/IP核心進(jìn)行溝通。需要注意的是,Carchive類對象不能與數(shù)據(jù)報(UDP)套接字一起工作,因此對于數(shù)據(jù)報套接字,CAsyncSocket和CSocket 的使用方法是一樣的?!?Sockets程序開發(fā)的技術(shù)要點(diǎn)(1)同常規(guī)編程一樣,無論服務(wù)器方還是客戶方應(yīng)用程序都要進(jìn)行所謂的初始化處理,這部分工作仍可采用消息驅(qū)動機(jī)制來先期完成。在這段時間內(nèi) ,要進(jìn)行如下工作:接收數(shù)據(jù),利用收到的數(shù)據(jù)進(jìn)行運(yùn)算,將運(yùn)算結(jié)果發(fā)送到其它計(jì)算機(jī)節(jié)點(diǎn),周而復(fù)始。(2)網(wǎng)絡(luò)層,即互聯(lián)網(wǎng)層,通常處理分組網(wǎng)絡(luò)中的活動,例如分組的路由選擇。幾乎各種不同的TCP/IP實(shí)現(xiàn)都會提供下面這些通用的應(yīng)用程序。如果沒有傳完,下次就可以繼續(xù)打開這個信息文件,接著上次的進(jìn)度傳輸。服務(wù)器端存放在適當(dāng)?shù)目臻g中,在發(fā)送給客戶端時,對信息列表進(jìn)行格式化,便于客戶端提取信息。(3)開發(fā)文檔易理解,保證以后自己二次開發(fā)或他人接手開發(fā)時,能夠清晰的理解整個系統(tǒng)的設(shè)計(jì)思路和實(shí)現(xiàn)細(xì)節(jié)。而且對自身的經(jīng)濟(jì)要求也不高,只要有一臺到兩臺可開發(fā)程序軟件的電腦便可,所以不用考慮到經(jīng)濟(jì)問題。 概要設(shè)計(jì)根據(jù)以上的軟件需求分析,可對本軟件進(jìn)行如下的功能模塊劃分,總體功能如圖41所示。(4) 傳輸文件模塊:用戶端文件傳輸?shù)墓δ?,使用戶之間可以進(jìn)行文件傳輸?!≌{(diào)試模塊為了方便調(diào)試,在程序中添加了一個用于調(diào)試的類CDebug,它具有的成員變量和成員函數(shù)如下:class CDebug {private: CString m_strMessage。 TRACE( strTrace )。本設(shè)計(jì)也不例外,同樣也要達(dá)到這樣的目的。ModifyStyleEx( WS_EX_APPWINDOW, 0 )。(3)熱鍵的處理設(shè)計(jì)中默認(rèn)的熱鍵是Ctrl+Alt+Z,當(dāng)然程序允許用戶自己定義熱鍵。 ::SetForegroundWindow( m_hWnd )。實(shí)現(xiàn)托盤圖標(biāo)的代碼如下:NOTIFYICONDATA m_nid。sprintf( , 即時聊天軟件 )。void CInstantMessagingDlg::OnDestroy() { /// 刪除在托盤建立的圖標(biāo) ::Shell_NotifyIcon( NIM_DELETE, amp。當(dāng)首次運(yùn)行程序時,會創(chuàng)建一個名為“InstantMessaging”的事件,這個事件在系統(tǒng)范圍內(nèi)有效,當(dāng)再次運(yùn)行程序時,程序會嘗試著創(chuàng)建同名的事件,因?yàn)橹耙呀?jīng)創(chuàng)建了這個事件,因此系統(tǒng)會返回之前創(chuàng)建事件的句柄,但GetLastError()會返回ERROR_ALREADY_EXISTS,表明需創(chuàng)建的事件之前已經(jīng)創(chuàng)建,為了保證只允許一個實(shí)例,這個實(shí)例就不再允許運(yùn)行,直接返回,退出程序。(2)選定一個自己的IP,然后單擊“網(wǎng)段”按鈕。自繪按鈕和自繪列表框會作為一個單獨(dú)的模塊來介紹,這兒就不作過多的介紹。 /// 按下圖標(biāo)CBitmap m_bmpDisable。 CButton::PreSubclassWindow()。 = sizeof( TRACKMOUSEEVENT )。void CAdvButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) { if( lpDrawItemStructitemState amp。 case DISABLE: DrawDISABLE()。在TransparentBlt()最后一個參數(shù)中指定掩碼色,貼圖時掩碼色就不會貼出來。 /// 當(dāng)前選中用戶序號與自繪按鈕類似,在PreSubclassWindow()函數(shù)中更改列表框的風(fēng)格為自繪:void CFriendsListCtrl::PreSubclassWindow() { ModifyStyle( 0, LVS_OWNERDRAWFIXED )。如果是單擊,先判斷m_nDelIcon、m_nCamera值,如果不為1,則選中了刪除或攝像頭按鈕,調(diào)主對框相應(yīng)函數(shù)執(zhí)行相應(yīng)操作。m_pLisSocketCreate( DEFAULT_PORT, SOCK_DGRAM )。()。delete pSendData。請求者添加好友流程圖,如圖43所示。在下一次定時器到的時候,程序檢查臨時好友列表,在臨時好友列表中的好友都是沒有回應(yīng)的的好友,這些好友可能是因?yàn)槌绦虿徽jP(guān)閉而未向其他好友發(fā)送下線通知,程序就可以將這些好友刪除。 } } ()。 memcpy( pSendData, amp。為了解決這個問題,如果沒有注冊,程序會先注冊,代碼如下:HKEY hKey。圖45 聊天對話框聊天對話框用的Socket是主對話框的m_pLisSocket,當(dāng)要發(fā)送消息時,調(diào)用主對話框的SendPreChatMessage()函數(shù),主對話框接收到聊天消息時調(diào)用聊天對話框的ReceiveMessage()函數(shù)。然后調(diào)用主對話框的SendPreChatMessage()函數(shù)向m_userChat好友發(fā)送聊天消息。如果與此IP的聊天窗口打開的,就直接調(diào)用ReceiveMessage()把消息放入接收文本框中,如果聊天窗口沒有打開,則把消息追加到CMapStringToOb類型的變量m_mapIPToChat中,并在托盤區(qū)動態(tài)顯示用戶的頭像。}初始化WinSocket后,WSADATA結(jié)構(gòu)中就有我們需要的信息。如果接收完畢,播放聲音,并判斷與此IP對應(yīng)的聊天窗口是否打開,是則調(diào)用ReceiveMessage()把消息放入到接收消息文本框,否則把消息保存起來,并動態(tài)顯示托盤的圖標(biāo),等待用戶打開聊天窗口時再把消息放到接收文本框。圖46 聊天室服務(wù)器界面服務(wù)器右邊兩個列表框分別表示在聊天室里的好友、不在聊天室里的好友;客戶端右邊的列表框表示在聊天室中的好友。以上代碼就是向好友user發(fā)送加入聊天室請求,因?yàn)樵诩尤肓奶焓抑?,這些好友并沒有創(chuàng)建聊天室客戶端SOCKET,所以必須向主對話框的m_pLisSocket套接字發(fā)送消息,這從DEFAULT_PORT端口號就可以看出來。 }聊天室好友列表里第一個是自己,不必要給自己發(fā)送消息,因此nIndex是從1開始的。 nIndex1 ()。在客戶端打開的同時,限制發(fā)送文本框的最大字?jǐn)?shù),創(chuàng)建客戶端SOCKET,端口號為CHATROOM_CLIENT_PORT的UDP。文件傳送支持?jǐn)帱c(diǎn)續(xù)傳,這是本程序的一個亮點(diǎn)。如果接收者拒絕接收文件,列表框的相應(yīng)項(xiàng)的速度列會被設(shè)置為“拒絕”。}在此函數(shù)中先定義一個CSendFilesSocket類型的變量sfSocket,m_pSFServerSocket接收此WinSocket,就與接收都連接起來了。CSendFilesServerThread類用于發(fā)送文件數(shù)據(jù),接收者連接到m_pSFServerSocket后,接收者就可以與CSendFilesServerThread類中的CSendFilesSocket成員變量m_sendFilesSocket通信了。在傳輸入文件對話框中選中某些傳輸信息,單擊“刪除”按鈕,會彈出刪除提示框詢問用戶是否刪除這些傳輸信息,如果用戶確定刪除這些傳輸信息,傳略文件對話框會刪除這些傳輸信息,如果文件正在傳輸入,會關(guān)閉線程,停止傳輸文件。 pSFSThreadSetSendFilesServerDlg( this )。圖48 傳輸文件界面單擊添加按鈕會打開選擇文件對話框,選擇好要發(fā)送的文件后,會彈出一個好友列表框,要求選擇需要發(fā)送的好友,選擇了好友后,程序會把發(fā)送文件信息添加到傳輸入文件對話框中,并向接收者發(fā)起傳送文件的請求,如果接收者拒絕接收文件,在傳輸文件對話框的相應(yīng)項(xiàng)的速度列就會顯示“拒絕”,如果接收者接受文件,文件傳送正式開始??蛻舳私拥椒?wù)器發(fā)來的聊天消息時,處理也很簡單,直接將聊天消息加入到接收消息文本框。}以上就是服務(wù)器的主要功能。 nIndex ()。當(dāng)聊天室服務(wù)器關(guān)閉時,會向所有聊天室好友發(fā)送關(guān)閉聊天室的消息:for( int nIndex = 1。用戶創(chuàng)建聊天室時,創(chuàng)建端口為CHATROOM_SERVER_PORT的UDP套接定,把自己加入到聊天室好友列表里,同時也把自己添加的所有好友加入到未進(jìn)入聊天室好友列表中?!×奶焓夷K聊天室模塊設(shè)計(jì)目的是為多人共同聊天提供一個便捷的環(huán)境,由一人創(chuàng)建聊天室之后,可以將多個好友加進(jìn)聊天室,使得多個用戶實(shí)現(xiàn)簡單的通信需求。然后向消息發(fā)送者發(fā)送請求接收第一個數(shù)據(jù)包的請求。UDP可以發(fā)送的最大數(shù)據(jù)量可以由下面的代碼得到:WSADATA wsaData。 ( strText )。 CString strTime = ( %H:%M:%S )。 } else { //獲取注冊函數(shù)DllRegisterServer地址 FARPROC lpDllEntryPoint。 ( )。 DATAPACKET dataPacket。 nIndex++ ) { USER userDel = ( nIndex )。另外,當(dāng)用戶改變自己的狀態(tài)為下線狀態(tài)或關(guān)閉程序時,會調(diào)用SendOffLineMessage()函數(shù)向所有好友發(fā)送下線消息,并刪除所有的好友。在OnListeningReceive()函數(shù)中,根據(jù)DATAPACKET的mand值來進(jìn)行相應(yīng)的處理,這就是添加為好友的流程,先得到發(fā)起請求的USER,再調(diào)用AddRequest()函數(shù)做相應(yīng)處理。dataPacket, sizeof( DATAPACKET ) )。/// 設(shè)置請求的用戶結(jié)構(gòu)USER user。 好友管理好友管理包括添加好友、刪除好友以及與好友保持連接。列表框中的鼠標(biāo)離開消息與自繪按鈕的實(shí)現(xiàn)是同一個原理,這兒就不再贅述。 /// 主對話框CImageList m_imageList。當(dāng)鼠標(biāo)滑過或單擊按鈕時,更改m_nState的值,然后調(diào)用Invalidate(),強(qiáng)制按鈕重繪。 case HOVER: DrawHOVER()。tme )。 GetWindowText( strText )。m_pToolTipCtrl是提示工具控件類,既是鼠標(biāo)在其上時,會彈出提示窗口。在自繪按鈕類中定義了如下成員變量:int m_nState。單擊保存后。有兩種方式添加聯(lián)系人:(1)在右上解的查找IP輸入框里輸入IP,然后單擊下面的添加按鈕。(6)只允許運(yùn)行唯一實(shí)例這點(diǎn)與不同,在一臺機(jī)子上可以運(yùn)行多個,但本程序只允許運(yùn)行一個實(shí)例。如果你們對圖標(biāo)有單擊和雙擊等操作,程序會收到WM_SHELLNOTIFY消息,因此,我們還必須處理WM_SHELLNOTIFY消息。 = sizeof( NOTIFYICONDATA )。 } else { CDialog::OnSysCommand(nID, lParam)。注冊成功后,如果按熱鍵,那么程序就會接受到WM_HOTKEY消息,因此我們還需要自己處理WM_HOTKEY消息:void OnHotkey( WPARAM wParam, LPARAM lParam )。(2)將主界面放在最上層將程序放到頂層,很多程序都有這功能,比如金山詞霸等,實(shí)現(xiàn)起來其實(shí)很簡單,只用一條語句就可以達(dá)到目的:SetWindowPos( amp。CInstantMessagingDlg dlg( amp。}利用類的構(gòu)造、析構(gòu)函數(shù)和類的生命周期,我們可以很方便的設(shè)計(jì)如上的CDebug類,用法如下:{ CDebug debug( “test” )。}?!『旰蛿?shù)據(jù)結(jié)構(gòu)的定義程序中用到了很多宏和數(shù)據(jù)結(jié)構(gòu),這些宏和數(shù)據(jù)結(jié)構(gòu)在多個模塊中都有用到,此頭文件里是程序中很多的宏和數(shù)據(jù)結(jié)構(gòu)的定義。本模塊目的是為多個用戶提供基本的聊天環(huán)境。第一,介紹本軟件的概要設(shè)計(jì)。(2)故障處理在遇到可預(yù)知的故障與情況時,能提示用戶并自動退出;在遇到不可預(yù)知的故障時能安全退出?!⌒阅苄枨蠓治觯?)可靠性高,能在由于系統(tǒng)問題或其它原因產(chǎn)生錯誤后,作出相對應(yīng)處理,比如網(wǎng)絡(luò)初始化失敗、服務(wù)器不在線等,可以提示用戶安全退出本程序,在出現(xiàn)不可知的錯誤以后,可以盡量安全的退出程序。(4)用戶之間后臺的連接,每個用戶隔指定一段時間會向用戶列表中的每一用戶發(fā)送消息,查看用戶是否在線,如果不在線,就更新用戶列表,刪除用戶。這樣,兩個用戶之前就可以實(shí)現(xiàn)通信了。TCP為兩臺主機(jī)提供高可靠性的數(shù)據(jù)通信。TCP/IP協(xié)議是包括上百個協(xié)議,其中包括很多功能:TCP(Transfer Control Protocol)傳輸控制協(xié)議,IP(Internet Protocol)互聯(lián)網(wǎng)協(xié)議,UDP(User Datagram Protocol)用戶數(shù)據(jù)報協(xié)議,ICMP(Internet Control Message Protocol)互聯(lián)網(wǎng)控制信息協(xié)議,F(xiàn)TP(File Transfer Protocol)文件傳輸協(xié)議,SMTP(Simle Mail Transfer Protocol)簡單郵件傳輸協(xié)議,SNMP(simle Network Manage Protocol)簡單網(wǎng)絡(luò)管理協(xié)議,ARP(Address Resolution Protocol)地
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1