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è)論文-預(yù)覽頁

2024-07-22 18:49 上一頁面

下一頁面
 

【正文】 它的參數(shù),解釋同上。 (6)使用CArchive對(duì)象的Read()、Write()等函數(shù)在客戶與服務(wù)方傳送數(shù)據(jù)。在單獨(dú)調(diào)試網(wǎng)絡(luò)通信程序時(shí),要盡量與采用該通信模塊的其它應(yīng)用程序開發(fā)者約定好,統(tǒng)一采用一種界面形式,即單文檔界面SDI、多文檔界面MDI和基于對(duì)話框界面中的一種(這在使用AppWizard形成項(xiàng)目[Project]文件時(shí)有提示),盡管這并非必須,但可使通信模塊在移植到所需的應(yīng)用程序時(shí)省時(shí)省力,因?yàn)閂isual C++ ,也給我們帶來某些不便,譬如所形成的項(xiàng)目文件中的許多相關(guān)文件與所采用的界面形式密切聯(lián)系,許多消息驅(qū)動(dòng)功能,隨所采用的界面形式不同而各異。Visual C++ 、管理線程、同步化線程、終止線程等功能函數(shù)。 TCP/IP協(xié)議概述TCP/IP協(xié)議(Transfer Control Protocol/Internet Protocol)指?jìng)鬏斂刂?網(wǎng)絡(luò)協(xié)議,又叫網(wǎng)絡(luò)通訊協(xié)議。每一層負(fù)責(zé)不同的功能:(1)鏈路層,通常包括操作系統(tǒng)中的設(shè)備驅(qū)動(dòng)程序和計(jì)算機(jī)中對(duì)應(yīng)的網(wǎng)絡(luò)接口。(3)運(yùn)輸層,為兩臺(tái)主機(jī)上的應(yīng)用程序提供點(diǎn)對(duì)點(diǎn)活端到端的通信。而UDP則為應(yīng)用層來提供。文本和圖片聊天是聊天軟件最基礎(chǔ)的功能。(2)用戶端文件傳輸?shù)墓δ?,用戶之間可以斷點(diǎn)續(xù)傳文件。(3)用戶端之間白板和聊天室的功能,這個(gè)功能有些類似遠(yuǎn)程會(huì)議內(nèi)容的傳輸,研究目的是為了滿足企業(yè)內(nèi)部隨時(shí)性小會(huì)議室的要求。在控件上顯示時(shí)格式化,更易于用戶的查看自己發(fā)送或接收到的信息。包括客戶端剛剛啟動(dòng)時(shí)的初始化信息和在使用過程中的確認(rèn)在線信息。(2)宜操作性,程序簡(jiǎn)單易懂,容易上手使用?!∵\(yùn)行需求分析(1)用戶界面程序較小,啟動(dòng)速度快,無啟動(dòng)界面。如果問題沒有可行的解釋,分析員應(yīng)該建議停止這項(xiàng)開發(fā)工程,以避免時(shí)間、資源、人力和金錢的浪費(fèi)。 運(yùn)行可行性分析 本軟件為一個(gè)小型的基于局域網(wǎng)的通信軟件,所耗費(fèi)的資源是非常小的,現(xiàn)在一般的電腦無論是硬件還是軟件都能夠滿足條件,因此,本軟件在運(yùn)行上是可行的。詳細(xì)設(shè)計(jì)是先從基本框架的設(shè)計(jì)出發(fā),然后逐步介紹好友管理模塊、聊天模塊、聊天室模塊、傳送文件模塊、白板模塊。本模塊目的是為兩個(gè)用戶提供基本的聊天環(huán)境。這個(gè)白板就是一個(gè)畫板,多個(gè)用戶建立連接之后,可通過此白板模塊達(dá)到信息共享的目的。(5)用戶之間后臺(tái)的連接,每個(gè)用戶隔指定一段時(shí)間會(huì)向用戶列表中的每一用戶發(fā)送消息,查看用戶是否在線,如果不在線,就更新用戶列表,刪除用戶?!〕绦蚺渲梦募绦蛑泻芏嘈畔⑿枰4妫热缬脩裘蜔徭I,因些程序用到了配置文件。 CDebug( CString strMessage )。 CString strTrace。 strTrace = run out : + m_strMessage + \n。  主界面初始化用過的人都知道,主面板總是處于其他程序的上面,而且在任務(wù)欄沒有圖標(biāo),而是把圖標(biāo)放到了托盤區(qū),另外,我們還可以按Ctrl+Alt+Z默認(rèn)的快捷鍵隱藏和顯示主面板。( IDD_DIALOG_BG )。m_pMainWnd = amp。首先,我們創(chuàng)建一個(gè)對(duì)話框,并隱藏此對(duì)放框,然后把這個(gè)對(duì)話框作為主界面對(duì)話框的父窗口,然后在主界面對(duì)話框的初始化函數(shù)中修改其風(fēng)格,去掉WS_EX_APPWINDOW風(fēng)格。第一個(gè)參數(shù)就是將程序放到所有非頂層窗口的頂層,如果有多個(gè)程序都是頂層窗口,那么他們誰在上面,就要看當(dāng)前誰是激活的窗口。::RegisterHotKey( m_hWnd, IDHOTKEY, m_wModifiers, m_wVirtualKeyCode )。void CInstantMessagingDlg::OnHotkey( WPARAM wParam, LPARAM lParam ){ if( thisIsWindowVisible() ) { ShowWindow( SW_HIDE )。(4)最小化和關(guān)閉按鈕的處理我們希望單擊程序右上角的最小化按鈕時(shí),程序隱藏起來,而單擊關(guān)閉按鈕時(shí),程序會(huì)提示是否退出,而不會(huì)悄無聲息的退出。 }}在程序中處理OnSysCommand()函數(shù)和OnCancel ()函數(shù)就實(shí)現(xiàn)了我們要的功能。 = hIcon。 = NIF_ICON | NIF_MESSAGE | NIF_TIP。m_nid )。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ì)中只處理左鍵雙擊(顯示主界面)和右鍵單擊(彈出菜單)。 CDialog::OnDestroy()。if( hEvent ){ if( ERROR_ALREADY_EXISTS == GetLastError() ) { return FALSE。圖41 主界面左上角顯示的是自己的頭像、狀態(tài)和昵稱;右上角的列表框是查找IP輸入框,下面是添加按鈕;在下面一點(diǎn)的列表框是自己的址列表框,顯示了自己的所有IP;主界面中央是用戶列表框;最下面是4個(gè)功能按鈕。程序允許保存10個(gè)最近聯(lián)系人的IP,當(dāng)新添加聯(lián)系人時(shí),如果已保存了10個(gè)聯(lián)系人的IP,程序會(huì)按照時(shí)間的先后順序覆蓋之前的IP。在主界面任何地點(diǎn)單擊左鍵不放開,可以拖動(dòng)程序;單擊右鍵,會(huì)彈出菜單,用戶選中相應(yīng)的菜單項(xiàng),可以執(zhí)行相應(yīng)的功能;在任何地點(diǎn)雙擊左鍵,可以打開“個(gè)人設(shè)置”對(duì)話框,如圖42所示。在主界面,添加、聊天室、傳送文件和白板按鈕都是自繪按鈕,可以顯示圖片,有提示能力,當(dāng)鼠標(biāo)移動(dòng)到其上一會(huì)兒后,會(huì)彈出提示框,而且這些按鈕都具有XP風(fēng)格,既鼠標(biāo)滑過時(shí)會(huì)顯示不同的狀態(tài)。在程序的主界面上,主要的按鈕都采用了自繪按鈕,而不使用自帶的按鈕控件。 /// 正常圖標(biāo)CBitmap m_bmpHover。 /// 提示類m_nState表示當(dāng)前按鈕的狀態(tài),可以為宏:NORMAL,HOVER,DOWN,DISABLE,分別表示按鈕正常狀態(tài)、處于焦點(diǎn)狀態(tài)、按下狀態(tài)、無效狀態(tài),這4個(gè)宏的定義在實(shí)現(xiàn)文件。重載PreSubclassWindow(),在這個(gè)函數(shù)中更改按鈕風(fēng)格并初始化m_pToolTipCtrl。 ( 100 )。 }VC++,只能為我們添加鼠標(biāo)移動(dòng)、單擊等消息,我們得自己為自繪按鈕添加上鼠標(biāo)離開的消息。 = TME_LEAVE。下面的處理方式與熱鍵和托盤通知消息的處理方式一樣,自定義這個(gè)消息處理函數(shù)就行了。 } switch( m_nState ) { case NORMAL: DrawNORMAL()。 case DOWN: DrawDOWN()。 default: break。lpDrawItemStructitemState的值表示了當(dāng)前按鈕的狀態(tài),可以檢測(cè)lpDrawItemStructitemState,如果按鈕是無效狀態(tài),則設(shè)置m_nState為DISABLE,否則不作改變。 /// 攝像頭激活的序號(hào)int m_nDelIcon。}重載MeasureItem()函數(shù)更改列表框每一項(xiàng)的高度:void CFriendsListCtrl::MeasureItem( LPMEASUREITEMSTRUCT lpMeasureItemStruct ){lpMeasureItemStructitemHeight = DEFAULT_FRIENDSLIST_HEIGHT。鼠標(biāo)在好友列表框上移動(dòng)時(shí),判斷鼠標(biāo)是否在刪除或攝像頭(如果有攝像頭)按鈕范圍內(nèi),如果在,就設(shè)置m_nDelIcon或m_nCamera為當(dāng)前項(xiàng)的序號(hào),否則就設(shè)置m_nCurSel為當(dāng)前項(xiàng)的序號(hào)。在自繪時(shí),為了防止閃爍,程序用到了雙緩沖技術(shù)。首先,對(duì)話框定義監(jiān)聽Socket并初始化:CListeningSocket *m_pLisSocket。如果可以添加此好友,則向此好友發(fā)起請(qǐng)求加為好友的請(qǐng)求:/// 定義數(shù)據(jù)包DATAPACKET dataPacket。 = m_wFace。BYTE *pSendData = new BYTE[ uDataLength ]。user, sizeof( USER ) )。向好友發(fā)起請(qǐng)求的數(shù)據(jù)中,還包括自己的USER數(shù)據(jù)。如果拒絕加為好友,則向發(fā)送者發(fā)送拒絕的消息。收到請(qǐng)求是否允許將好友添加到數(shù)組和列表框中并發(fā)送允許消息發(fā)送拒絕消息TF圖44 好友收到請(qǐng)求流程圖 刪除好友刪除好友比較簡(jiǎn)單,在服務(wù)器端向要?jiǎng)h除的好友發(fā)送命令為OFFLINE的消息,然后從好友數(shù)組和好友列表框中刪除此好友。好友收到請(qǐng)求保持連接的消息后,會(huì)發(fā)送回應(yīng)保持連接的消息。在OnTimer()函數(shù)中進(jìn)行如下處理:/// 保持接連if( TIMER_CONNECT == nIDEvent ) { /// 刪除沒有回應(yīng)的聯(lián)系人 for( int nIndex = 0。 ( nIndex )。 nIndex ()。 /// 分配空間 UINT uDataLength = sizeof( DATAPACKET )。 m_pLisSocketSendTo( pSendData, uDataLength, DEFAULT_PORT, )。本系統(tǒng)用到了Microsoft Rich Textbox Control ,此控件支持RTF(Rich Text Format)格式的內(nèi)容,包括不同顏色、不同字體字號(hào)的文本和圖片。hKey ) != ERROR_SUCCESS ) { HINSTANCE hLib = LoadLibrary( )。 /// lpDllEntryPoint()。CRichText m_rtSend。 /// 發(fā)送聊天消息 m_pMainDlgSendPreChatMessage( m_userChat, strTime, strSend )。 ( %s(%s) %s\r\n , , , szTime )。 …}因?yàn)榱奶煊玫腟ocket是主對(duì)話框的m_pLisSocket,因此是主對(duì)話框接收到的聊天消息。所以在發(fā)送這種大數(shù)據(jù)量的消息時(shí),本程序采用的分包發(fā)送的方式。wsaData )){ AfxMessageBox(IDP_SOCKETS_INIT_FAILED)。聊天對(duì)話框發(fā)送消息時(shí)調(diào)用主對(duì)話框的SendPreChatMessage()函數(shù),這個(gè)函數(shù)并不是一下子將消息發(fā)送出去,而是將消息保存起來,只發(fā)送一個(gè)通知消息告訴對(duì)方有數(shù)據(jù)需要發(fā)送,這個(gè)通知消息中帶有消息的時(shí)間的消息的長(zhǎng)度。對(duì)方接收到消息數(shù)據(jù)包后,把消息放入到接收消息的臨時(shí)空間,并判斷數(shù)據(jù)是否接收完畢。勾選上“關(guān)閉時(shí)保存聊天記錄”,關(guān)閉聊天對(duì)話框會(huì)聊天記錄會(huì)自動(dòng)保存在形如“()”的文件中,文件名由聊天開始時(shí)間、IP、昵稱組成。聊天室也只能發(fā)送普通文本消息,所以聊天室的開發(fā)相比聊天來說,相對(duì)簡(jiǎn)單,但是設(shè)計(jì)目的與聊天也有所不同。這也是聊天室的一個(gè)好處。SendUserCommandToIP( CHATROOM_ADDREQUEST, , DEFAULT_PORT, amp。單擊向下的按鈕,會(huì)刪除聊天室好友列表框中選定的好友,并向他們發(fā)送被踢出聊天室的消息:SendUserCommandToIP( CHATROOM_CLIENT_KICKED, , CHATRO OM_CLIENT_PORT, NULL )。 nIndex++ ){ USER user = ( nIndex )。在服務(wù)器創(chuàng)建的時(shí)候,限制過發(fā)送文本框的字?jǐn)?shù):( MAXDATAPACKETLENGTH sizeof( DATAPACKET ) sizeof( CHATROOMMESSAGEINFO ) )。SendTextToIP( , CHATROOM_CLIENT_PORT, strSend, )。 if( 0 == strcmp( , ) ) { continue。聊天室客戶端如圖47所示。客戶端關(guān)閉時(shí),會(huì)向服務(wù)器發(fā)送客戶端關(guān)閉的消息。服務(wù)器在當(dāng)中起到了中轉(zhuǎn)的作用,所有消息都經(jīng)過服務(wù),服務(wù)器向所有好友發(fā)送消息,就算聊天室中的好友不能互相連接,只要能連接到服務(wù)器,他們就可以一起聊天。一個(gè)線程負(fù)責(zé)將一個(gè)文件傳送給一個(gè)好友。用戶打開文件傳輸功能,彈出傳輸文件對(duì)話框,在初始對(duì)話框的時(shí)候,除了初始化傳輸文件列表框,還會(huì)創(chuàng)建一個(gè)端口號(hào)為SENDFILESSERVER_PORT的TCP套按字m_pSFServerSocket,并設(shè)置此套接字為監(jiān)聽狀態(tài)。 m_pSFServerSocketAccept( sfSocket )。 pSFSThreadResumeThread()。在線程中也有一個(gè)CSendFilesSocket類型的成員變量,將這兒的sfSocket分離掉套接字句柄,附加到線程中的相同類型的成員變量上。每當(dāng)定時(shí)器時(shí)間到時(shí),程序調(diào)用RefreshListBox()函數(shù)刷新列表框,更新文件傳輸?shù)倪M(jìn)度
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1