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

正文內(nèi)容

基于局域網(wǎng)的聊天軟件畢業(yè)論文(參考版)

2025-06-27 02:35本頁面
  

【正文】 void ProcessSendFileNot。 //}}AFX_VIRTUAL // Generated message map functions //{{AFX_MSG(CIMSocket) // NOTE the ClassWizard will add and remove member functions here. //}}AFX_MSG// Implementationprotected: //下面是對于各種命令的處理函數(shù) void ProcessSendFileNotify(CPacketamp。 packet)。 packet)。 //發(fā)送給服務(wù)器 BOOL SendToFriend(void *lpData, int nBufLen, DWORD nAddr, UINT nPort)。 BOOL CreateRecvThread()。 CIMSocket(CWnd *pWnd)。 CChatDlg *m_pActiveDlg。 HWND m_hMainWnd。 UINT16 m_friendNum。 UINT16 m_port。 UINT32 m_ip。 CIMLoginedDlg* m_pMainWnd。2.客戶端部分(1)CIMSocket類,主要用于客戶端的命令消息的發(fā)送和接收。 //數(shù)據(jù)包發(fā)來的端口 int m_nBufLen。 //數(shù)據(jù)包內(nèi)容 UINT32 m_nAddr。 //頭指針 char* m_lpData。 virtual ~CPacket()。 operator=(CPacketamp。 UINT32 GetAddr()。 BOOL ReceiveFrom(void *lpData, int nSize)。 //創(chuàng)造包頭 void SetNetworkInfo(CString szAddr, UINT16 nPort)。 void CreateHeader(IM_Headeramp。 struct IM_Header* GetIMHeader()。 CPacket(CPacketamp。由于客戶端和服務(wù)器的代碼過多,整個工程所涉及到了很多類,函數(shù)和數(shù)據(jù),因此這里只描述了重要類的聲明。大大減少了用戶們的操作,使聊天更為簡化,便捷。面板設(shè)計如下圖: 當(dāng)好友或群信息來臨后,消息框會自動彈出,并顯示5秒后自洞淡出關(guān)閉。群列表群成員列表 群聊天界面圖 好友信息界面好友信息界面由CFredInfoDlg對話框?qū)崿F(xiàn),該對話框用直觀的形式顯示出好友的基本信息,同時還可以在線更新信息,來獲取最新,最及時的好友信息。iMessaging內(nèi)部默認(rèn)最多可以同時傳輸五個文件,但是該數(shù)字今后可以自由配置,主要是考慮到文件傳輸過多,會影響到系統(tǒng)的運行效率,因此將每個好友文件傳輸個數(shù)最大值設(shè)置為5個。前者一個用來顯示消息,另一個用來發(fā)送消息。 查找好友/群的界面查找好友界面也是用了一個CIMTabCtrl控件對象,在其中又添加了兩個CSearchPage對象,一個顯示查找好友,另一個顯示查找群,當(dāng)點擊查找后,會顯示出查找的結(jié)果,若結(jié)果不是你想要的,你還可以點上一步繼續(xù)查找。用戶在操作的時候,可以通過對主面板單擊右鍵,可選中察看資料,也可以直接雙擊頭像。可以右擊空白處彈出菜單群列表按鈕好友列表,可以雙擊好友直接聊天,也可以單擊右鍵彈出菜單選擇操作。當(dāng)有消息到來時還會不停的閃爍。登陸中,可以選擇取消登陸 登陸驗證界面圖 已登陸界面已登陸界面是由CIMLogonDlg對話框類實現(xiàn),該類包含了一個派生于CWnd的CIMTabCtrl對象,用于容納兩個列表控件和對應(yīng)的兩個Tab按鈕??梢允謩釉O(shè)置服務(wù)器IP,和客戶端進(jìn)程端口。3.圖標(biāo)的設(shè)計iMessaging圖標(biāo)是根據(jù)本軟件的命名設(shè)計而成,以藍(lán)色為底色,iM為頂層字母。其中簡單型按鈕有四狀態(tài),離開,懸浮,按下,禁用。2.控件的設(shè)計本軟件的控件設(shè)計原則為分為兩大類,可貼圖按鈕型控件和列表控件。其中主操作界面面板主要運用在登陸界面(分為登陸會員界面,登陸驗證界面和已登陸界面),子操作界面主要運用在子功能模塊上(如聊天對話界面,查詢界面,用戶信息界面),便捷操作界面面板主要運用在簡潔模式上。在簡潔模式下,可以直接察看當(dāng)前所有好友發(fā)來的消息,完全滿足用戶的便捷需求。4.為了更方便用戶的使用,提供大量的使用幫助導(dǎo)航條,使用戶輕松熟悉該軟件的所有操作。操作便捷,能提高年輕人聊天的效率2.界面統(tǒng)一采用淺藍(lán)色為主色調(diào),白色為輔色,給人一種清新,愉快地感覺。具體設(shè)計原則如下。CIMessageDlg中的m_pSocket。會員在線信息CGroupInfo定義為群數(shù)據(jù)類,包含了群的基本信息。CListCMember, CMemberamp。g_globalDataCPacket封裝了數(shù)據(jù)包屬性和操作,能存儲各種數(shù)據(jù)包的類。CGroupChatDlg群聊天窗口CListCGroupChatDlg*,CGroupChatDlg* g_groupChatDlgList。CFiletransPageItem里的m_pSocket字段CImageBmpList定義為CIMListCtrl所用到的圖標(biāo)鏈表CGlobalData里的g_grayImageBmpList字段,g_colorImageBmpList字段。好友信息鏈表CIMSocket定義為主要UDP通信的類,封裝了通信的接受和發(fā)送相關(guān)函數(shù)。CListCFriend, CFriendamp。 g_groupList。m_writeBuffer 用于文件傳輸?shù)牡谝粚泳彌_m_writeBuffer2 第二層緩沖CGroup定義為群數(shù)據(jù)類,包含群的基本信息。 g_msgStack。 g_sendMsgList。g_globalDataCPacket封裝了數(shù)據(jù)包屬性和操作,是一個能存儲各種數(shù)據(jù)包的類。 }MEMBER_GROUP_DATA, *PMEMBER_GROUP_DATA。typedef struct _MEMBER_GROUP_DATA{ DWORD dwCount。 usr_info useInfo[1]。}。 UINT32 administrator_id。 UINT8 name[MAX_NAME_LEN+1]。 //狀態(tài): 在線=0,離線=1;}。 UINT16 im_udp_port。3.在線用戶信息結(jié)構(gòu)struct usr_info_online{ UINT32 user_id。 UINT32 last_update_time。}user_baseinfo。 UINT8 profession[MAX_PROFESSION_LEN+1]。 UINT8 telephone[MAX_TEL_LEN+1]。 UINT8 birthday[MAX_BIRTHDAY_LEN+1]。 UINT8 country[MAX_COUNTRY_LEN+1]。 UINT8 gender。2.用戶信息結(jié)構(gòu)typedef struct user_baseinfo{ UINT32 user_id。 UINT32 reserved。 UINT32 id。數(shù)據(jù)庫名稱:iMessaging1.MemberInfo表,存儲了關(guān)于會員的所有信息。除此之外,為了防止惡意軟件偽造命令包而大量傳輸數(shù)據(jù)包造成服務(wù)器癱瘓,因此服務(wù)器采用限制命令數(shù)的辦法,也就是一段時間里只能接受幾條同樣的命令,若發(fā)現(xiàn)某條命令反復(fù)發(fā)送或異常發(fā)送,便發(fā)送終止命令給客戶端,若發(fā)現(xiàn)無法終止客戶端,則強行屏蔽所有該IP和端口發(fā)來的消息包。DES 使用 16 個循環(huán),使用異或,置換,代換,移位操作四種基本運算。這是一個迭代的分組密碼,使用稱為 Feistel 的技術(shù),其中將加密的文本塊分成兩半。加密算法利用DES(數(shù)據(jù)加密算法)來加密明文,以保證socket通信的安全性。當(dāng)在線的群成員客戶端收到該消息后,判斷該群窗口是否打開,若未打開,創(chuàng)建并顯示消息??蛻舳嗽谌豪锇l(fā)送即時消息,程序內(nèi)部實際上發(fā)送了IM_GROUP_MSG命令給服務(wù)器,服務(wù)器接收到該命令后,創(chuàng)建SendGroupMsg處理線程。群聊天設(shè)計思路是讓服務(wù)器轉(zhuǎn)發(fā)消息給所有群成員?;谝陨显?,CFiletransPageItem實現(xiàn)了該協(xié)議算法。發(fā)送端必須始終滿足nLastSendSeg nLastAckSeg = ,若發(fā)現(xiàn)某序號包在規(guī)定時間內(nèi)沒有得到ack,便重發(fā)該數(shù)據(jù)包,若接收到的確認(rèn)包的序號recvSegnLastAckSeg+1的話,只能將此包拋棄或添加到一個數(shù)組中暫存起來,直到該序列號前面所有的序號都均接收到才將nLastAckSeg 更新為recvSeg,原理圖如下。}RecvWindow。 unsigned int nAvaliableSegRecved。}SendWindow。 unsigned int nLastSendSeg。因此,發(fā)送方需創(chuàng)建一個發(fā)送窗口,接收方需創(chuàng)建一個接收窗口。接收方會創(chuàng)建一個名為RecvThread的接收線程和一個名為WriteToFileThread的寫文件線程。發(fā)送方會創(chuàng)建一個名為FileTransferThread的發(fā)送線程,不斷地向?qū)Ψ桨l(fā)送文件數(shù)據(jù)。文件傳輸開始后,所有關(guān)于該文件的數(shù)據(jù)傳輸都發(fā)生在該CFiletransPageItem對象和CIMUdpSendFileSocket對象里。接收請求的客戶端收到命令后,會創(chuàng)建一個CFiletransPageItem對象進(jìn)行文件傳輸,同時也創(chuàng)建一個專門用于該任務(wù)的套接字。當(dāng)客戶端選擇發(fā)送文件請求后,將立即創(chuàng)建該類,同時會在對話框初始化代碼部分創(chuàng)建一個基于UDP的套接字,用于文件傳輸,該套接字的收發(fā)封裝到CIMUdpSendFileSocket類里,并采用阻塞式的IO模型。在系統(tǒng)實現(xiàn)技術(shù)章節(jié)介紹了基于UDP的文件傳輸?shù)拇蟾诺脑O(shè)計思想,現(xiàn)在就全面分析下在iMessaging里是如何實現(xiàn)基于多個任務(wù)的UDP文件傳輸。若對方同意了,兩方客戶端都均更新好友列表,同時服務(wù)器要更新好友關(guān)系表里的內(nèi)容。當(dāng)待加好友的客戶端接到好友申請后,用戶可以選擇同意或者拒絕,隨后又將回復(fù)的信息發(fā)送給服務(wù)器,讓服務(wù)器來回復(fù)起初申請?zhí)砑雍糜训目蛻舳???蛻舳讼雀鶕?jù)待加好友特征查詢好友信息,若有該好友,客戶端可以選擇添加該好友,隨后,客戶端會發(fā)送一個add_friends_info的數(shù)據(jù)包給服務(wù)器,當(dāng)服務(wù)器接收到該請求后,便進(jìn)入AddFriends線程進(jìn)行處理,首先服務(wù)器會驗證該好友是否在線,若不在線,便發(fā)送離線請求(保存在離線消息數(shù)據(jù)庫里),若在線,將立即發(fā)送請求給待加好友。其次,該結(jié)構(gòu)含有一個子命令字段sub_cmd,表示現(xiàn)在發(fā)送到服務(wù)器端的命令時請求,還是通知回復(fù)。在添加好友和加入群功能實現(xiàn)都大同小異,其中服務(wù)器起到了中間紐帶的作用。在初始化該對話框時,會將之前獲取的信息加入到兩個CIMListCtrl里面(登陸界面的列表控件),隨后會向服務(wù)器發(fā)送離線消息請求,服務(wù)器接收到消息后,會將保存在數(shù)據(jù)庫里的離線消息發(fā)送給該會員。iMessaging在獲取好友信息時并不是全部獲取,除非是該計算機第一次登陸該賬號,因為在登陸后,客戶端會將登陸信息記錄在文件里,下次本機登陸時就可以直接從文件中獲取,加快登陸速度。當(dāng)服務(wù)器執(zhí)行完登陸處理線程后,客戶端進(jìn)入接收流程,若驗證失敗,根據(jù)錯誤信息進(jìn)行錯誤提示,若發(fā)現(xiàn)驗證成功,便開始獲取登陸信息。驗證后將返回信息給客戶端,在iMessaging里,幾乎所有由server回應(yīng)給客戶端的數(shù)據(jù)包結(jié)構(gòu)體被定義為XXX_back的名字,如登陸回應(yīng),用到了login_back結(jié)構(gòu)體。在服務(wù)器部分,通過前面描述的udp的接收流程,服務(wù)器在接收到登陸請求后,最終會創(chuàng)建一個LoginThread線程來進(jìn)行登陸驗證。登陸所發(fā)送的數(shù)據(jù)包被定義為了一個名為login_info的結(jié)構(gòu)體(),該結(jié)構(gòu)體除了包含命令頭部外,還包含了待登陸的賬號和密碼。}該結(jié)構(gòu)體的cmd字段便是命令,所有的命令被定義為宏。UINT16 id。創(chuàng)建該對話框1秒之后,會開始向服務(wù)器發(fā)送會員驗證包,iMessaing定義的命令包主要采用結(jié)構(gòu)體的方式,每一個命令包都含有一個命名包頭和命令包數(shù)據(jù),其中頭部被定義為:struct IM_Header{UINT32 cmd。 TCP接收處理線程執(zhí)行流程圖(服務(wù)器端)iMessaing的會員登陸采用了UDP和TCP相結(jié)合的方式,涉及到地的對話框切換較多,登陸過程較為復(fù)雜。當(dāng)處理線程執(zhí)行結(jié)束后,不應(yīng)該立即退出,這樣會由于反復(fù)創(chuàng)建和銷毀線程而浪費大量的CPU時間和資源。由于考慮到同時將會有多個獲取好友列表或群成員列表的請求,為了提高服務(wù)器的響應(yīng)速度,也應(yīng)該為獲取好友列表和群成員分別創(chuàng)建一個線程來accept客戶端的請求連接。 TCP接收請求處理流程圖(服務(wù)器端)在服務(wù)器端,iMessaging同樣是在主窗口的OnInitDialog里創(chuàng)建TCP連接,同樣提供了一個內(nèi)部接口函數(shù)BOOL CIMessageDlg::CreateTCPSocket()來創(chuàng)建TCP連接。2.TCP連接為了保證數(shù)據(jù)的可靠性,對于連續(xù)發(fā)送大量有序的數(shù)據(jù)包,采用UDP協(xié)議并不保險,因此在必要的時候,也必須采用TCP協(xié)議來支持?jǐn)?shù)據(jù)的穩(wěn)定和可靠性。另一個用來向其它客戶端發(fā)送數(shù)據(jù),函數(shù)原型為BOOL CIMSocket::SendToFriend(void *lpData, int nBufLen, DWORD nAddr, UINT nPort)。這是因為客戶端不僅需要發(fā)送
點擊復(fù)制文檔內(nèi)容
化學(xué)相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1