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

正文內(nèi)容

聊天系統(tǒng)客戶端的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)(編輯修改稿)

2025-07-20 20:02 本頁面
 

【文章內(nèi)容簡介】 處理接受數(shù)據(jù),在CRecvSocket類的OnReceive里處理,調(diào)用了一個(gè)名為ProcessRecvData的線程函數(shù),用戶在這個(gè)線程函數(shù)里寫上具體的處理代碼算法描述:發(fā)送一個(gè)數(shù)據(jù),需要等待響應(yīng)信息的回來,如果在規(guī)定時(shí)間內(nèi),還沒有收到確認(rèn)信息,則認(rèn)為發(fā)送數(shù)據(jù)丟失,將重試FailReDoTime次,如果還是沒有確認(rèn)信息發(fā)送回來,則返回發(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)信息的回來。SendData函數(shù)的實(shí)現(xiàn)算法,通過設(shè)置一個(gè)緩沖區(qū)長度為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)回來了。偵聽類結(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ù)可由用戶來確定與客戶端上層的接口是CClientSocket類,它隱藏了服務(wù)器底層通訊的細(xì)節(jié)及多線程發(fā)送數(shù)據(jù)的問題,提供給上一層一個(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ù)的場合,不需要回應(yīng)。如果在線程里執(zhí)行,則可由其返回值確定發(fā)送成功與否。而SendDataInThread是建立一個(gè)線程,在線程里調(diào)用SendData函數(shù)進(jìn)行發(fā)送數(shù)據(jù),通過向指定接受窗口發(fā)送消息來確定是否成功。算法描述:發(fā)送一個(gè)數(shù)據(jù),需要等待響應(yīng)信息的回來,如果在規(guī)定時(shí)間內(nèi),還沒有收到確認(rèn)信息,則認(rèn)為發(fā)送數(shù)據(jù)丟失,將重試FailReDoTime次,如果還是沒有確認(rèn)信息發(fā)送回來,則返回發(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)信息的回來。SendData函數(shù)的實(shí)現(xiàn)算法,與服務(wù)器端是基本一樣的原理,通過設(shè)置一個(gè)緩沖區(qū)長度為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)回來了。因?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ù)的過程放在線程里執(zhí)行,通過發(fā)消息的手段,來返回結(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ā)送失敗整個(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指示其長度,LoadFromBuf函數(shù)則是已知在緩沖區(qū)中數(shù)據(jù),把各項(xiàng)的值,從緩沖區(qū)中提取出來。因?yàn)槭褂胾dp協(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ù)的打包過程中,對(duì)字符串的打包原理為:先存入串長度,再存入串。串的長度,采用的是2個(gè)字節(jié)的WORD類型,已經(jīng)足夠滿足要求了。打包時(shí),按照某一順序,對(duì)其進(jìn)行數(shù)據(jù)的存入串中,解開時(shí),以相同的順序進(jìn)行還原即可。其中,類CModifyPersonPI的算法與其它類不大一樣,因?yàn)樗某蓡T中有一個(gè)位掩Mask成員,只有被選中的成員,才會(huì)打包入串。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ù)器端開設(shè)的偵聽端口數(shù)組 int m_nSendNum。 // 發(fā)送端口的個(gè)數(shù) int m_nTimeOut。 //發(fā)送一次數(shù)據(jù)的超時(shí)時(shí)間 BOOL m_bServerStarted。 //標(biāo)志服務(wù)是否已經(jīng)開啟 UserOnline* m_pUsers。 //用來存儲(chǔ)服務(wù)開啟后,在線人的信息的一個(gè)指針, CDatabase m_Database。 //數(shù)據(jù)庫對(duì)象 CString m_sConnectString。 //聯(lián)接數(shù)據(jù)庫需要的字符串參數(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()}。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ù)(從文件中讀出) 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ù)字串為目錄) CString m_strServerIP。 服務(wù)器IP地址的字符串 DWORD m_uServerIP。 服務(wù)器IP地址的32位整數(shù) DWORD m_uServerPort。 服務(wù)器的端口號(hào) BYTE m_cLoginType。 登陸時(shí),選擇的狀態(tài)(是否隱身登陸) CImageList m_imaLarge。 //用戶頭像的大圖標(biāo)列表CImageList m_imaSmall //用戶頭像的小圖標(biāo)列表CImageListm_imaHead。 //供用戶選擇頭像時(shí)的大圖標(biāo)列表(沒有灰色顯示的) CBitmapm_paBitmap。//用來指向在運(yùn)行時(shí),動(dòng)態(tài)創(chuàng)建的Cbitmap對(duì)象數(shù)組 int m_nBitmapNum。//指示Cbitmap對(duì)象的個(gè)數(shù) virtual BOOL InitInstance()。//包括客戶端的初始化和配置信息的讀取等 virtual int ExitInstance()。//退出時(shí),必要的清理工作,如果在線,則向服務(wù)器發(fā)送下線消息 void SaveCurIDToFile()。//把當(dāng)前用戶的ID號(hào),加入配置文件中,下次登陸就可以選擇了 BOOL SaveUserInfo()。//保存所有用戶的信息到磁盤文件中 BOOL LoadFriendInfo()。//從磁盤中讀取用戶信息 BOOL LoadFaceBmp()。//從磁盤中讀取用戶頭像信息 BOOL LoadLocalAllUserID(CArrayint,intamp。aID)。//從配置文件中讀出所有可選登陸用戶的ID afx_msg void OnAppAbout()。 afx_msg void OnSendBroadcast()。 //調(diào)用發(fā)送廣播對(duì)話框 afx_msg void OnSendtoAll()。 //調(diào)用向所有好友發(fā)送數(shù)據(jù)的對(duì)話框 afx_msg void OnSysSetup()。 //調(diào)用服務(wù)器設(shè)置的對(duì)話框 afx_msg void OnSearch()。 //調(diào)用查找用戶的對(duì)話框 afx_msg void OnSendFile()。 //實(shí)現(xiàn)文件的發(fā)送(現(xiàn)在還沒有完成) DECLARE_MESSAGE_MAP()}。第四章 系統(tǒng)實(shí)現(xiàn)軟件環(huán)境說明:Microsoft Visual;C++ ;SQL Server2000;Windows XP硬件環(huán)境說明:CPU:Intel(R) Pentium(R) processor ;內(nèi)存:256M;硬盤:40G安裝:1.打開控制面板,選擇“管理工具”,打開“數(shù)據(jù)源”,會(huì)出現(xiàn)如下圖所示的ODBC數(shù)據(jù)源管理器。如下圖41所示:圖41 ODBC數(shù)據(jù)源管理器2.點(diǎn)擊“添加”,出現(xiàn)一個(gè)“創(chuàng)建新數(shù)據(jù)源”界面。如下圖42所示:圖42 ODBC數(shù)據(jù)源管理器3.點(diǎn)擊“Microsoft Accss Driver(*.mdb)”然后點(diǎn)擊“完成”,點(diǎn)擊“完成”后,出現(xiàn)“ODBC Microsoft Accss 安裝”界面,輸入數(shù)據(jù)源名“IDServer”,點(diǎn)擊“完成”即可。如圖43所示: 圖43 ODBC Microsoft Access 安裝 之后出現(xiàn)“選擇數(shù)據(jù)庫”界面,選擇數(shù)據(jù)庫即完成。如圖44所示: 圖44 ODBC數(shù)據(jù)源管理器
點(diǎn)擊復(fù)制文檔內(nèi)容
法律信息相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1