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

正文內(nèi)容

聊天系統(tǒng)客戶端的設(shè)計(jì)與實(shí)現(xiàn)本科生畢業(yè)設(shè)計(jì)論文(已改無(wú)錯(cuò)字)

2022-08-26 20:21:43 本頁(yè)面
  

【正文】 顯示登陸窗口的對(duì)話框類 ClookDlg 顯示查看消息的對(duì)話框類 CregisterDlg 顯示注冊(cè)窗口的對(duì)話框類 CsetupServerDlg 修改服務(wù)器設(shè)置的對(duì)話框 CtalkDlg 顯示發(fā)送消息對(duì)話框的類 CshowBroadcastDlg 顯示廣播消息的對(duì)話框 CshowAddMsgDlg 顯示被加為好友的信息的對(duì)話框 CmultiSendDlg 通過(guò)姓名或 ID 列表的向多人發(fā)送信息的對(duì)話框 CsendToAllDlg 向所有好友發(fā)送消息的對(duì)話框 CModifyPIDlg 修改個(gè)人信息的對(duì)話框 CGfxGroupEdit,CGfxOutBarCtrl,CGfxPopupMenu 實(shí)現(xiàn)像 OutBar 和 oicq 樣式的那種滾動(dòng)分欄的界面類,從 Inter,上獲得的源代碼,通過(guò)修改一些接口,使之更適合我的應(yīng)用。提供了一個(gè)漂 亮的界面。 類 處理在任務(wù)欄上添加 .修改 .刪除圖標(biāo)的類。封閉了 Window 的 API 函數(shù) : UserInfo 結(jié)構(gòu)存儲(chǔ)在線人的信息 FriendState 在好友線信息結(jié)構(gòu) SaveMsg 消息的存儲(chǔ)結(jié)構(gòu) Sparam 傳給線程的參數(shù)結(jié)構(gòu) 服務(wù)器端底層通訊類 設(shè)計(jì) 為了使能及時(shí)響應(yīng)用戶的請(qǐng)求,當(dāng)用戶很多時(shí),仍然能夠適應(yīng)要求,我把偵聽(tīng)與發(fā)送數(shù)據(jù)的 Socket 分開(kāi),并分別都建立了多個(gè)實(shí)例, 也就是說(shuō),支持多個(gè)端口的偵聽(tīng),發(fā)送數(shù)據(jù)使用的是多個(gè)端口,我只對(duì)偵聽(tīng)端口感興趣,對(duì)發(fā)送 數(shù)據(jù)的端口不感興趣,因?yàn)?,發(fā)送端口是多少都無(wú)所謂。 CRecvSocket 和 CsendSocket 都是從 CAsyncSocket 類里繼承而來(lái),分別處理偵聽(tīng)請(qǐng)求各發(fā)送數(shù)據(jù),在 CServerSocket 類里,定義了幾個(gè) CRecvSocket 和 CSendSocket 對(duì)象的實(shí)例,通過(guò) CServerSocket 類對(duì)內(nèi)部進(jìn)行組織和管理,提供給上層的接口是CServerSocket,它隱藏了服務(wù)器底層通訊的細(xì)節(jié)及多線程發(fā)送數(shù)據(jù)的問(wèn)題,提供給上一層一個(gè)統(tǒng)一的接口, CServerSocket 類的使用,是先建立一個(gè)它的實(shí)例,再 調(diào)用成員函數(shù) Create(),傳入必要的參數(shù),發(fā)送數(shù)據(jù)時(shí),就調(diào)用其成員函數(shù) SendData,處理接受數(shù)據(jù),在 CRecvSocket 類的 OnReceive 里處理,調(diào)用了一個(gè)名為 ProcessRecvData 的線程函數(shù),用戶在這個(gè)線程函數(shù)里寫(xiě)上具體的處理代碼 算法描述: 本科生畢業(yè)設(shè)計(jì)(論文) 16 發(fā)送一個(gè)數(shù)據(jù),需要等待響應(yīng)信息的回來(lái),如果在規(guī)定時(shí)間內(nèi),還沒(méi)有收到確認(rèn)信息,則認(rèn)為發(fā)送數(shù)據(jù)丟失,將重試 FailReDoTime 次,如果還是沒(méi)有確認(rèn)信息發(fā)送回來(lái),則返回發(fā)送失敗,否則,返回發(fā)送成功。 因?yàn)榉?wù)器是多線程的發(fā)送數(shù)據(jù),有一個(gè)請(qǐng)求,就建 立一個(gè)線程進(jìn)行處理。我為每個(gè)發(fā)送 socket 設(shè)置一個(gè)是否忙的標(biāo)志 busy,當(dāng)需要發(fā)送數(shù)據(jù)時(shí),就選擇一個(gè)空閑的sendsocket,設(shè)置為忙,然后發(fā)送數(shù)據(jù),再設(shè)置回空閑,然后等待確認(rèn)信息的回來(lái)。 SendData 函數(shù)的實(shí)現(xiàn)算法,通過(guò)設(shè)置一個(gè)緩沖區(qū)長(zhǎng)度為 N,然后,為每一次數(shù)據(jù)進(jìn)行統(tǒng)計(jì),發(fā)一次,就加 1,然后把發(fā)送數(shù)據(jù)中的 This=count%N,且把緩沖區(qū)中第 This個(gè)成員設(shè)為 0,在發(fā)送端,就要數(shù)組中的第 This 個(gè)成員是否為 1即可,在接受到的確認(rèn)信息中,取出 This 項(xiàng),再為緩沖區(qū)中第 This 項(xiàng)設(shè)為 1,這樣就可以快 速且可靠的判斷發(fā)送數(shù)據(jù)是否得到響應(yīng)回來(lái)了。 偵聽(tīng)類結(jié)構(gòu): class CRecvSocket 發(fā)送數(shù)據(jù)的 socket 類結(jié)構(gòu) : class CSendSocket : 服務(wù)器的 socket 類 : CServerSocket 這個(gè)通訊類的 SendData,當(dāng)發(fā)送數(shù)據(jù)失敗時(shí),可以重發(fā)幾次,次數(shù)可由用戶來(lái)確定 客戶端 底層通訊類設(shè)計(jì) 與客戶端上層的接口是 CClientSocket 類,它隱藏了服務(wù)器底層通訊的細(xì)節(jié)及多線程發(fā)送數(shù)據(jù)的問(wèn)題,提供給上一層一個(gè)統(tǒng)一的接口, CClientSocket 類的使用,是先建立一個(gè)它的實(shí) 例,再調(diào)用成員函數(shù) Create()傳入必要的參數(shù),發(fā)送數(shù)據(jù)時(shí),就調(diào)用其成員函數(shù) SendData,或 SendDataInThread 處理發(fā)送數(shù)據(jù),在 CRecvSocket 類的 OnReceive里處理,向父窗口發(fā)送一個(gè) WM_RECIEVE_MSG 消息,并把接受到的數(shù)據(jù)作為參數(shù)傳遞給父窗口。兩個(gè)函數(shù)的適應(yīng)情況, SendData 函數(shù),適用于需要直接發(fā)送數(shù)據(jù)的場(chǎng)合,不需要回應(yīng)。如果在線程里執(zhí)行,則可由其返回值確定發(fā)送成功與否。而 SendDataInThread是建立一個(gè)線程,在線程里調(diào)用 SendData 函數(shù)進(jìn)行發(fā)送數(shù) 據(jù),通過(guò)向指定接受窗口發(fā)送消息來(lái)確定是否成功。 算法描述: 發(fā)送一個(gè)數(shù)據(jù),需要等待響應(yīng)信息的回來(lái),如果在規(guī)定時(shí)間內(nèi),還沒(méi)有收到確認(rèn)信息,則認(rèn)為發(fā)送數(shù)據(jù)丟失,將重試 FailReDoTime 次,如果還是沒(méi)有確認(rèn)信息發(fā)送回來(lái),則返回發(fā)送失敗,否則,返回發(fā)送成功。 因?yàn)榭蛻舳丝梢远嗑€程的發(fā)送數(shù)據(jù),有一個(gè)請(qǐng)求,就建立一個(gè)線程進(jìn)行處理。我為每個(gè)發(fā)送 socket 設(shè)置一個(gè)是否忙的標(biāo)志 busy,當(dāng)需要發(fā)送數(shù)據(jù)時(shí),就選擇一個(gè)空閑的sendsocket,設(shè)置為忙,然后發(fā)送數(shù)據(jù),再設(shè)置回空閑,然后等待確認(rèn)信息的回來(lái)。 SendData函數(shù)的實(shí)現(xiàn)算法,與服務(wù)器端是基本一樣的原理,通過(guò)設(shè)置一個(gè)緩沖區(qū)長(zhǎng)度為 N,然后,為每一次數(shù)據(jù)進(jìn)行統(tǒng)計(jì),發(fā)一次,就加 1,然后把發(fā)送數(shù)據(jù)中的This=count%N,且把緩沖區(qū)中第 This 個(gè)成員設(shè)為 0,在發(fā)送端,就要數(shù)組中的第 This本科生畢業(yè)設(shè)計(jì)(論文) 17 個(gè)成員是否為 1 即可,在接受到的確認(rèn)信息中,取出 This 項(xiàng),再為緩沖區(qū)中第 This 項(xiàng)設(shè)為 1,這樣就可以快速且可靠的判斷發(fā)送數(shù)據(jù)是否得到響應(yīng)回來(lái)了。 因?yàn)樵诳蛻舳?,大部分?jǐn)?shù)據(jù),是在某個(gè)消息處理函數(shù)中執(zhí)行的,所以,適用于服務(wù)器的 SendData 發(fā)送數(shù)據(jù)函數(shù),在客戶端,若是在消息處理函數(shù) 中發(fā)送,函數(shù)返回值,將永遠(yuǎn)為 FALSE,于是就添加了一個(gè) SendDataInThread 函數(shù),把發(fā)送數(shù)據(jù)的過(guò)程放在線程里執(zhí)行,通過(guò)發(fā)消息的手段,來(lái)返回結(jié)果。在 SendDataInThread 函數(shù)中,調(diào)用 SendData函數(shù)進(jìn)行發(fā)送數(shù)據(jù)。 客戶端通訊類的結(jié)構(gòu): CClientSocket 在線程里發(fā)送數(shù)據(jù),成功,或失敗都會(huì)向指定窗口類發(fā)送一個(gè) WM_SENDINTHREAD_RES 的消息,參數(shù) WPARAM 為發(fā)送數(shù)據(jù)的指針,參數(shù) LPARAM 為 1,則表示發(fā)送成功, 0 則表示發(fā)送失敗 客戶 /服務(wù)器 間 通訊 數(shù)據(jù)類 設(shè)計(jì) 整個(gè)系統(tǒng)的所有的發(fā)送的數(shù)據(jù),都包含在這幾個(gè)類中了,當(dāng)要發(fā)送一種數(shù)據(jù),則先確定一個(gè)數(shù)據(jù)類,然后填入相應(yīng)數(shù)據(jù),再調(diào)用函數(shù) PackToBuf 就可以把這些數(shù)據(jù),存入szBuf 的數(shù)組緩沖區(qū)中, num 指示其長(zhǎng)度, LoadFromBuf 函數(shù)則是已知在緩沖區(qū)中數(shù)據(jù),把各項(xiàng)的值,從緩沖區(qū)中提取出來(lái)。因?yàn)槭褂?udp 協(xié)議發(fā)送數(shù)據(jù), sendto 和 recvfrom函數(shù),只能處理串的發(fā)送和接受,所以,把數(shù)據(jù)壓為串,和從串中恢復(fù)數(shù)據(jù),是這些數(shù)據(jù)類所必須完成的功能。 算法描述: 定義的基類,提供了數(shù)據(jù)的一種統(tǒng)一的接口,其派生類再對(duì)其虛函 數(shù)進(jìn)行重載,實(shí)現(xiàn)相應(yīng)的功能。在數(shù)據(jù)的打包過(guò)程中,對(duì)字符串的打包原理為:先存入串長(zhǎng)度,再存入串。串的長(zhǎng)度,采用的是 2 個(gè)字節(jié)的 WORD 類型,已經(jīng)足夠滿足要求了。打包時(shí),按照某一順序,對(duì)其進(jìn)行數(shù)據(jù)的存入串中,解開(kāi)時(shí),以相同的順序進(jìn)行還原即可。其中,類CModifyPersonPI 的算法與其它類不大一樣,因?yàn)樗某蓡T中有一個(gè)位掩 Mask 成員,只有被選中的成員,才會(huì)打包入串。 服務(wù)器 應(yīng)用程序類設(shè)計(jì) CServerApp 類, 定義了服務(wù)器全局的數(shù)據(jù)結(jié)構(gòu), class CServerApp : public CWinApp { public: void SaveMyProfileSettings()。 //保存配置文件 BOOL LoadMyProfileSettings()。 //讀取配置文件 CServerApp()。 CServerSocket m_Socket。 //服務(wù)器端的上層 socket 接口 CArrayDWORD,DWORDm_anPort。 //服務(wù)器端開(kāi)設(shè)的偵聽(tīng)端口數(shù)組 本科生畢業(yè)設(shè)計(jì)(論文) 18 int m_nSendNum。 // 發(fā)送端口的個(gè)數(shù) int m_nTimeOut。 //發(fā)送一次數(shù)據(jù)的超時(shí)時(shí)間 BOOL m_bServerStarted。 //標(biāo)志服務(wù)是否已經(jīng)開(kāi)啟 UserOnline* m_pUsers。 //用來(lái)存儲(chǔ)服務(wù)開(kāi)啟后,在線人的信息的一個(gè)指針, CDatabase m_Database。 //數(shù)據(jù)庫(kù)對(duì)象 CString m_sConnectString。 //聯(lián)接數(shù)據(jù)庫(kù)需要的字符串參數(shù) int m_nNumberOnline。 //當(dāng)前在線的人數(shù) int m_nMaxUserId。 //最大的用戶帳號(hào)(隨著用戶帳號(hào)的申請(qǐng)而增加) int m_nRecvMsg。 //當(dāng)前從啟動(dòng)后,接受到多少交請(qǐng)求信息 CString m_strBroadcastPwd。 //發(fā)廣播消息的密碼 CString m_strDataSource。 //數(shù)據(jù)源的字符串 CString m_strDataSUID。 //用戶 UID 字符串 CString m_strDataSPwd。 //數(shù)據(jù)源的密碼字符串 CString m_strLocalIP。 //本計(jì)算機(jī)的 IP 地址字符串 public: virtual BOOL InitInstance()。 //服務(wù)器程序的初始化部分 afx_msg void OnAppAbout()。 afx_msg void OnSetupServer()。 //進(jìn)行服務(wù)器設(shè)置 afx_msg void OnStartServer()。 //啟動(dòng)服務(wù) afx_msg void OnUpdateStartServer(CCmdUI* pCmdUI)。 afx_msg void OnUserOnline()。 //顯示在線的用戶的對(duì)話框 afx_msg void OnCloseServer()。 //關(guān)閉系統(tǒng)服務(wù) afx_msg void OnUpdateCloseServer(CCmdUI* pCmdUI)。 afx_msg void OnAppExit()。 //處理程序的退出,執(zhí)行程序中必要的清理工作 afx_msg void OnUpdateUserOnline(CCmdUI* pCmdUI)。 DECLARE_MESSAGE_MAP() }。 客戶端 應(yīng)用程序類設(shè)計(jì) CClientApp 類,定義了客戶端全局的數(shù)據(jù)結(jié)構(gòu),客戶端應(yīng)用程序的入口 class CClientApp : public CWinApp { public: CClientApp()。 BOOL m_bOnlineState。 //用戶的在線狀態(tài) (0,1,2 分別為離線,在線,隱身 ) int m_nNumberHeadBmp。 //保存頭像文件的個(gè)數(shù)(從文件中讀出) 本科生畢業(yè)設(shè)計(jì)(論文) 19 CArrayUserInfo*,UserInfo*m_aUserInfo。 //存儲(chǔ)好友信息的數(shù)組 CArrayUserInfo*,UserInfo*m_aStranger。//存儲(chǔ)陌生人信息的數(shù)組 CArrayFriendState*,FriendState*m_aUserState。 //存儲(chǔ)好友的在線狀態(tài)及相關(guān)信息 CArrayFriendState*,FriendState*m_aStrangerState。 //存儲(chǔ)陌生人在線狀態(tài)及相關(guān)信息 CArraySaveMsg*,SaveMsg*m_aSysMsg。 //接受到的系統(tǒng)消息數(shù)組 int m_nCurSysMsg。 //當(dāng)前讀到的系統(tǒng)消息的位置(索引) CArraySaveMsg*,SaveMsg*m_aBroadcast。存放廣播消息的數(shù)組 int m_nCurBroadcast。 // 當(dāng)前讀到的廣播消息的位置(索引) CArraySaveMsg*,SaveMsg*m_aBeAdd。//存放自己被別人加為好友的信息 int m_nCurBeAdd。 當(dāng)前讀到的被別人加為好友的信息的位置(索引) CClientSocket m_Socket。 //底層通訊類的實(shí)例對(duì)象 DWORD m_uCurrentUserID。 當(dāng)前用戶的 ID 號(hào) CString m_strCurIDpwd。當(dāng)前用戶的密碼 CString m_strCurUserDir。當(dāng)前用戶的運(yùn)行目錄(是 ID的數(shù)字串為目錄
點(diǎn)擊復(fù)制文檔內(nèi)容
研究報(bào)告相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1