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

正文內(nèi)容

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

2025-07-20 20:02 本頁面
 

【文章內(nèi)容簡介】 處理接受數(shù)據(jù),在CRecvSocket類的OnReceive里處理,調(diào)用了一個名為ProcessRecvData的線程函數(shù),用戶在這個線程函數(shù)里寫上具體的處理代碼算法描述:發(fā)送一個數(shù)據(jù),需要等待響應信息的回來,如果在規(guī)定時間內(nèi),還沒有收到確認信息,則認為發(fā)送數(shù)據(jù)丟失,將重試FailReDoTime次,如果還是沒有確認信息發(fā)送回來,則返回發(fā)送失敗,否則,返回發(fā)送成功。因為服務器是多線程的發(fā)送數(shù)據(jù),有一個請求,就建立一個線程進行處理。我為每個發(fā)送socket設置一個是否忙的標志busy,當需要發(fā)送數(shù)據(jù)時,就選擇一個空閑的sendsocket,設置為忙,然后發(fā)送數(shù)據(jù),再設置回空閑,然后等待確認信息的回來。SendData函數(shù)的實現(xiàn)算法,通過設置一個緩沖區(qū)長度為N,然后,為每一次數(shù)據(jù)進行統(tǒng)計,發(fā)一次,就加1,然后把發(fā)送數(shù)據(jù)中的This=count%N,且把緩沖區(qū)中第This個成員設為0,在發(fā)送端,就要數(shù)組中的第This個成員是否為1即可,在接受到的確認信息中,取出This項,再為緩沖區(qū)中第This項設為1,這樣就可以快速且可靠的判斷發(fā)送數(shù)據(jù)是否得到響應回來了。偵聽類結構:class CRecvSocket發(fā)送數(shù)據(jù)的socket類結構: class CSendSocket : 服務器的socket類: CServerSocket這個通訊類的SendData,當發(fā)送數(shù)據(jù)失敗時,可以重發(fā)幾次,次數(shù)可由用戶來確定與客戶端上層的接口是CClientSocket類,它隱藏了服務器底層通訊的細節(jié)及多線程發(fā)送數(shù)據(jù)的問題,提供給上一層一個統(tǒng)一的接口,CClientSocket類的使用,是先建立一個它的實例,再調(diào)用成員函數(shù)Create()傳入必要的參數(shù),發(fā)送數(shù)據(jù)時,就調(diào)用其成員函數(shù)SendData,或SendDataInThread處理發(fā)送數(shù)據(jù),在CRecvSocket類的OnReceive里處理,向父窗口發(fā)送一個WM_RECIEVE_MSG消息,并把接受到的數(shù)據(jù)作為參數(shù)傳遞給父窗口。兩個函數(shù)的適應情況,SendData函數(shù),適用于需要直接發(fā)送數(shù)據(jù)的場合,不需要回應。如果在線程里執(zhí)行,則可由其返回值確定發(fā)送成功與否。而SendDataInThread是建立一個線程,在線程里調(diào)用SendData函數(shù)進行發(fā)送數(shù)據(jù),通過向指定接受窗口發(fā)送消息來確定是否成功。算法描述:發(fā)送一個數(shù)據(jù),需要等待響應信息的回來,如果在規(guī)定時間內(nèi),還沒有收到確認信息,則認為發(fā)送數(shù)據(jù)丟失,將重試FailReDoTime次,如果還是沒有確認信息發(fā)送回來,則返回發(fā)送失敗,否則,返回發(fā)送成功。因為客戶端可以多線程的發(fā)送數(shù)據(jù),有一個請求,就建立一個線程進行處理。我為每個發(fā)送socket設置一個是否忙的標志busy,當需要發(fā)送數(shù)據(jù)時,就選擇一個空閑的sendsocket,設置為忙,然后發(fā)送數(shù)據(jù),再設置回空閑,然后等待確認信息的回來。SendData函數(shù)的實現(xiàn)算法,與服務器端是基本一樣的原理,通過設置一個緩沖區(qū)長度為N,然后,為每一次數(shù)據(jù)進行統(tǒng)計,發(fā)一次,就加1,然后把發(fā)送數(shù)據(jù)中的This=count%N,且把緩沖區(qū)中第This個成員設為0,在發(fā)送端,就要數(shù)組中的第This個成員是否為1即可,在接受到的確認信息中,取出This項,再為緩沖區(qū)中第This項設為1,這樣就可以快速且可靠的判斷發(fā)送數(shù)據(jù)是否得到響應回來了。因為在客戶端,大部分數(shù)據(jù),是在某個消息處理函數(shù)中執(zhí)行的,所以,適用于服務器的SendData發(fā)送數(shù)據(jù)函數(shù),在客戶端,若是在消息處理函數(shù)中發(fā)送,函數(shù)返回值,將永遠為FALSE,于是就添加了一個SendDataInThread函數(shù),把發(fā)送數(shù)據(jù)的過程放在線程里執(zhí)行,通過發(fā)消息的手段,來返回結果。在SendDataInThread函數(shù)中,調(diào)用SendData函數(shù)進行發(fā)送數(shù)據(jù)??蛻舳送ㄓ嶎惖慕Y構:CClientSocket在線程里發(fā)送數(shù)據(jù),成功,或失敗都會向指定窗口類發(fā)送一個WM_SENDINTHREAD_RES 的消息,參數(shù)WPARAM為發(fā)送數(shù)據(jù)的指針,參數(shù)LPARAM為1,則表示發(fā)送成功,0則表示發(fā)送失敗整個系統(tǒng)的所有的發(fā)送的數(shù)據(jù),都包含在這幾個類中了,當要發(fā)送一種數(shù)據(jù),則先確定一個數(shù)據(jù)類,然后填入相應數(shù)據(jù),再調(diào)用函數(shù)PackToBuf就可以把這些數(shù)據(jù),存入szBuf的數(shù)組緩沖區(qū)中,num指示其長度,LoadFromBuf函數(shù)則是已知在緩沖區(qū)中數(shù)據(jù),把各項的值,從緩沖區(qū)中提取出來。因為使用udp協(xié)議發(fā)送數(shù)據(jù),sendto和recvfrom函數(shù),只能處理串的發(fā)送和接受,所以,把數(shù)據(jù)壓為串,和從串中恢復數(shù)據(jù),是這些數(shù)據(jù)類所必須完成的功能。算法描述:定義的基類,提供了數(shù)據(jù)的一種統(tǒng)一的接口,其派生類再對其虛函數(shù)進行重載,實現(xiàn)相應的功能。在數(shù)據(jù)的打包過程中,對字符串的打包原理為:先存入串長度,再存入串。串的長度,采用的是2個字節(jié)的WORD類型,已經(jīng)足夠滿足要求了。打包時,按照某一順序,對其進行數(shù)據(jù)的存入串中,解開時,以相同的順序進行還原即可。其中,類CModifyPersonPI的算法與其它類不大一樣,因為它的成員中有一個位掩Mask成員,只有被選中的成員,才會打包入串。CServerApp類,定義了服務器全局的數(shù)據(jù)結構,class CServerApp : public CWinApp{public: void SaveMyProfileSettings()。 //保存配置文件 BOOL LoadMyProfileSettings()。 //讀取配置文件 CServerApp()。 CServerSocket m_Socket。 //服務器端的上層socket接口 CArrayDWORD,DWORDm_anPort。 //服務器端開設的偵聽端口數(shù)組 int m_nSendNum。 // 發(fā)送端口的個數(shù) int m_nTimeOut。 //發(fā)送一次數(shù)據(jù)的超時時間 BOOL m_bServerStarted。 //標志服務是否已經(jīng)開啟 UserOnline* m_pUsers。 //用來存儲服務開啟后,在線人的信息的一個指針, CDatabase m_Database。 //數(shù)據(jù)庫對象 CString m_sConnectString。 //聯(lián)接數(shù)據(jù)庫需要的字符串參數(shù) int m_nNumberOnline。 //當前在線的人數(shù) int m_nMaxUserId。 //最大的用戶帳號(隨著用戶帳號的申請而增加) int m_nRecvMsg。 //當前從啟動后,接受到多少交請求信息 CString m_strBroadcastPwd。 //發(fā)廣播消息的密碼 CString m_strDataSource。 //數(shù)據(jù)源的字符串 CString m_strDataSUID。 //用戶UID字符串 CString m_strDataSPwd。 //數(shù)據(jù)源的密碼字符串 CString m_strLocalIP。 //本計算機的IP地址字符串 public: virtual BOOL InitInstance()。 //服務器程序的初始化部分 afx_msg void OnAppAbout()。 afx_msg void OnSetupServer()。 //進行服務器設置 afx_msg void OnStartServer()。 //啟動服務 afx_msg void OnUpdateStartServer(CCmdUI* pCmdUI)。 afx_msg void OnUserOnline()。 //顯示在線的用戶的對話框 afx_msg void OnCloseServer()。 //關閉系統(tǒng)服務 afx_msg void OnUpdateCloseServer(CCmdUI* pCmdUI)。 afx_msg void OnAppExit()。 //處理程序的退出,執(zhí)行程序中必要的清理工作 afx_msg void OnUpdateUserOnline(CCmdUI* pCmdUI)。 DECLARE_MESSAGE_MAP()}。CClientApp類,定義了客戶端全局的數(shù)據(jù)結構,客戶端應用程序的入口class CClientApp : public CWinApp{public: CClientApp()。 BOOL m_bOnlineState。 //用戶的在線狀態(tài)(0,1,2 分別為離線,在線,隱身) int m_nNumberHeadBmp。 //保存頭像文件的個數(shù)(從文件中讀出) CArrayUserInfo*,UserInfo*m_aUserInfo。 //存儲好友信息的數(shù)組 CArrayUserInfo*,UserInfo*m_aStranger。//存儲陌生人信息的數(shù)組 CArrayFriendState*,FriendState*m_aUserState。//存儲好友的在線狀態(tài)及相關信息 CArrayFriendState*,FriendState*m_aStrangerState。 //存儲陌生人在線狀態(tài)及相關信息 CArraySaveMsg*,SaveMsg*m_aSysMsg。 //接受到的系統(tǒng)消息數(shù)組 int m_nCurSysMsg。 //當前讀到的系統(tǒng)消息的位置(索引) CArraySaveMsg*,SaveMsg*m_aBroadcast。存放廣播消息的數(shù)組 int m_nCurBroadcast。 // 當前讀到的廣播消息的位置(索引) CArraySaveMsg*,SaveMsg*m_aBeAdd。//存放自己被別人加為好友的信息 int m_nCurBeAdd。 當前讀到的被別人加為好友的信息的位置(索引) CClientSocket m_Socket。 //底層通訊類的實例對象 DWORD m_uCurrentUserID。 當前用戶的ID號 CString m_strCurIDpwd。當前用戶的密碼 CString m_strCurUserDir。當前用戶的運行目錄(是ID的數(shù)字串為目錄) CString m_strServerIP。 服務器IP地址的字符串 DWORD m_uServerIP。 服務器IP地址的32位整數(shù) DWORD m_uServerPort。 服務器的端口號 BYTE m_cLoginType。 登陸時,選擇的狀態(tài)(是否隱身登陸) CImageList m_imaLarge。 //用戶頭像的大圖標列表CImageList m_imaSmall //用戶頭像的小圖標列表CImageListm_imaHead。 //供用戶選擇頭像時的大圖標列表(沒有灰色顯示的) CBitmapm_paBitmap。//用來指向在運行時,動態(tài)創(chuàng)建的Cbitmap對象數(shù)組 int m_nBitmapNum。//指示Cbitmap對象的個數(shù) virtual BOOL InitInstance()。//包括客戶端的初始化和配置信息的讀取等 virtual int ExitInstance()。//退出時,必要的清理工作,如果在線,則向服務器發(fā)送下線消息 void SaveCurIDToFile()。//把當前用戶的ID號,加入配置文件中,下次登陸就可以選擇了 BOOL SaveUserInfo()。//保存所有用戶的信息到磁盤文件中 BOOL LoadFriendInfo()。//從磁盤中讀取用戶信息 BOOL LoadFaceBmp()。//從磁盤中讀取用戶頭像信息 BOOL LoadLocalAllUserID(CArrayint,intamp。aID)。//從配置文件中讀出所有可選登陸用戶的ID afx_msg void OnAppAbout()。 afx_msg void OnSendBroadcast()。 //調(diào)用發(fā)送廣播對話框 afx_msg void OnSendtoAll()。 //調(diào)用向所有好友發(fā)送數(shù)據(jù)的對話框 afx_msg void OnSysSetup()。 //調(diào)用服務器設置的對話框 afx_msg void OnSearch()。 //調(diào)用查找用戶的對話框 afx_msg void OnSendFile()。 //實現(xiàn)文件的發(fā)送(現(xiàn)在還沒有完成) DECLARE_MESSAGE_MAP()}。第四章 系統(tǒng)實現(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ù)源”,會出現(xiàn)如下圖所示的ODBC數(shù)據(jù)源管理器。如下圖41所示:圖41 ODBC數(shù)據(jù)源管理器2.點擊“添加”,出現(xiàn)一個“創(chuàng)建新數(shù)據(jù)源”界面。如下圖42所示:圖42 ODBC數(shù)據(jù)源管理器3.點擊“Microsoft Accss Driver(*.mdb)”然后點擊“完成”,點擊“完成”后,出現(xiàn)“ODBC Microsoft Accss 安裝”界面,輸入數(shù)據(jù)源名“IDServer”,點擊“完成”即可。如圖43所示: 圖43 ODBC Microsoft Access 安裝 之后出現(xiàn)“選擇數(shù)據(jù)庫”界面,選擇數(shù)據(jù)庫即完成。如圖44所示: 圖44 ODBC數(shù)據(jù)源管理器
點擊復制文檔內(nèi)容
法律信息相關推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1