【正文】
Variable characters (320)Long integer主標(biāo)示符 pi好友關(guān)系會(huì)員號(hào)好友號(hào)piaiLong integerLong integerMM主標(biāo)示符次標(biāo)示符...piai群群號(hào)群名稱群描述群管理員號(hào)最近更新時(shí)間創(chuàng)建時(shí)間pi Long integerVariable characters (20)Variable characters (320)Long integerLong integerLong integerMMM主標(biāo)示符...pi群關(guān)系群號(hào)成員號(hào)piaiLong integerLong integerMM主標(biāo)示符次標(biāo)示符...piai離線消息發(fā)送時(shí)間信息類(lèi)別發(fā)送者號(hào)待發(fā)好有號(hào)待發(fā)群號(hào)附加信息piLong integerIntegerLong integerLong integerLong integerVariable characters (320)MMMMIdentifier_1...pi 基于局域網(wǎng)的聊天軟件的設(shè)計(jì)與實(shí)現(xiàn) 20 圖 CDM 圖 PDM 圖 屬于包含屬于包含擁有包含包含擁有屬于擁有會(huì)員會(huì)員號(hào)密碼昵稱性別年齡國(guó)家地區(qū)電話電子郵箱職業(yè)學(xué)校其他信息最近更新時(shí)間...integervarchar(20)varchar(30)smallintintegervarchar(10)varchar(20)varchar(20)varchar(40)varchar(30)varchar(50)varchar(320)integerpk好友關(guān)系會(huì)員_會(huì)員號(hào)會(huì)員號(hào)好友號(hào)integerintegerintegerpk,fkpkak群群號(hào)群名稱群描述群管理員號(hào)最近更新時(shí)間創(chuàng)建時(shí)間...integervarchar(20)varchar(320)integerintegerintegerpk群關(guān)系群_群號(hào)群號(hào)成員號(hào)integerintegerintegerpk,fkpkak離線消息會(huì)員_會(huì)員號(hào)發(fā)送時(shí)間信息類(lèi)別發(fā)送者號(hào)待發(fā)好有號(hào)待發(fā)群號(hào)附加信息...integerintegerintegerintegerintegerintegervarchar(320)fk擁有群號(hào)會(huì)員號(hào)integerintegerpk,fk1pk,fk2 圖 PDM 圖 基于局域網(wǎng)的聊天軟件的設(shè)計(jì)與實(shí)現(xiàn) 21 4 系統(tǒng)詳細(xì)設(shè)計(jì) 系統(tǒng)功能設(shè)計(jì) 主要功能模塊 1.服務(wù)器功能模塊框架圖 i M e s s a g i n g 服 務(wù) 器登陸驗(yàn)證功能注冊(cè)會(huì)員發(fā)送離線消息創(chuàng)建新群添加好友加入群心跳驗(yàn)證U D P打洞服務(wù)獲取好友或群信息日志記錄 圖 服務(wù)器功能模塊框架圖 2.客戶端功能模塊 i M e s s a i n g 客 戶 端會(huì)員登陸注冊(cè)會(huì)員創(chuàng)建I M群添加好友加入群好友聊天文件傳輸群聊天退出登陸查詢會(huì)員或群信息U D P打洞請(qǐng)求更改會(huì)員資料心跳功能 基于局域網(wǎng)的聊天軟件的設(shè)計(jì)與實(shí)現(xiàn) 22 圖 客戶端功能模塊 框架圖 主要功能描述 1.服務(wù)器功能描述 ( 1)登陸驗(yàn)證功能:當(dāng)客戶端發(fā)送了登陸驗(yàn)證命令后,服務(wù)器會(huì)驗(yàn)證傳入的帳號(hào)和密碼是否為已注冊(cè)的會(huì)員,并返回驗(yàn)證后的信息。 經(jīng)濟(jì)可行性 在開(kāi)發(fā)成本上,除了在設(shè)計(jì)界面上, 制作圖片上可能需要專業(yè)的人士進(jìn)行制作,會(huì)造成一定的經(jīng)濟(jì)開(kāi)銷(xiāo)。因此,在技術(shù)上是可行的。開(kāi)發(fā)該軟件,應(yīng)具備一定的 windows 編成基礎(chǔ),熟悉常用的 API 函數(shù),深入了解 MFC框架和窗口重繪技術(shù)。群里的所有成員的聊天都是公開(kāi)的,即該群所有成員能看到群里所有的發(fā)送的消息。會(huì)員有創(chuàng)建新群的功能,創(chuàng)建新群后,自身默認(rèn)為該群的管理員。會(huì)員可以與自己所有的好友進(jìn)行聊天,同時(shí)可以打開(kāi)多個(gè)好友的對(duì)話框窗口進(jìn)行文本聊天。注冊(cè)時(shí)填寫(xiě)基本信息,注冊(cè)成功后服務(wù)器會(huì)返回一個(gè)唯一的 iM 賬號(hào)。 iMessaging 在客戶端聊天模塊部分添加了該功能,但由于服務(wù)器環(huán)境的限制,暫時(shí)沒(méi)有測(cè)試環(huán)境。由于 iMessaging 聊天程序的服務(wù)器是所有客戶端的受信任者,因此,服務(wù)器可以發(fā)送任何信息給客戶端。在 iMessaging 聊天程序中,最常用的是臨界區(qū),原因是基于用戶模式,同步效率快,服務(wù)器可以進(jìn)行更多的操作,其次還用到了事件對(duì)象,由于臨界區(qū)太過(guò)單一的功能,并不能滿足有些數(shù)據(jù)同步的需要,因此用到了功能強(qiáng)大的事件對(duì)象,在 MFC中,事件對(duì)象被封裝成了 CEvent類(lèi),在 SDK 下,可以用調(diào)用 CreateEvent API 函數(shù)創(chuàng)建一個(gè)事件對(duì)象。除此之外,還可以傳遞參數(shù),供線程使用。那么進(jìn)程和線程有什么區(qū)別和聯(lián)系呢?進(jìn)程實(shí)際就是一個(gè)運(yùn) 基于局域網(wǎng)的聊天軟件的設(shè)計(jì)與實(shí)現(xiàn) 8 行的程序,該程序有自己的堆??臻g,有自己的線程(至少有一個(gè)主線程),并且可以創(chuàng)建其它進(jìn)程或線程。由于電腦的速度很快,這種非并發(fā)的模式卻可以達(dá)到類(lèi)似并發(fā)的效果。多線程編成雖說(shuō)是基礎(chǔ),但是卻是一個(gè)難點(diǎn),因?yàn)榫€程同步的確比我們想象的復(fù)雜得多。實(shí)際上, TCP的三次握手的確讓通訊數(shù)據(jù)得到了有序,有效地保證,但是正是因?yàn)檫@樣繁瑣的數(shù)據(jù)驗(yàn)證,導(dǎo)致它傳輸大量數(shù)據(jù)效率低下,在 TCP 實(shí)現(xiàn)內(nèi)部,實(shí)際上是采用了窗口大小為 1 的滑動(dòng)窗口算法進(jìn)行數(shù)據(jù)驗(yàn)證,因此, UDP 可以借于此思想,采用滑動(dòng)窗口算法和 CRC 冗余效驗(yàn)來(lái)保證數(shù)據(jù)的有效性,同時(shí)也會(huì)提高傳輸?shù)乃俣取?因此介于微軟提供的強(qiáng)大類(lèi)方法,就很容易實(shí)現(xiàn)數(shù)據(jù)的通信。 由于是基于 UDP 協(xié)議,并且考慮到在同一時(shí)間處理得命令并不會(huì)很大的情況,服務(wù)器和客戶端均采用基于非阻態(tài)的 IO模型實(shí)現(xiàn)命令的傳輸。對(duì)于這一特點(diǎn),數(shù)據(jù)報(bào)套接字采用了與現(xiàn)在許多包交換網(wǎng)絡(luò)(例如以太網(wǎng))非常類(lèi)似的模型 。流套接字提供了雙向的,有序的,無(wú)重復(fù)并且無(wú)記錄邊界的數(shù)據(jù)流服務(wù)。套接字可以根據(jù)通訊性質(zhì)分類(lèi);這種性質(zhì)對(duì)于用戶是可見(jiàn)的。通訊域是為了處理一般的線程通過(guò)套接字通訊而引進(jìn)的一種抽象概念。其 通信的基礎(chǔ)是套接 字 ( Socket),一個(gè)套接 字 是通訊的一端。而捕獲鼠標(biāo)的移入移出消息可以使用 _TrackMouseEvent 函數(shù),通過(guò)設(shè)置 TRACEMOUSEEVENT 結(jié)構(gòu)體的值來(lái)捕捉該消息。 對(duì)于 VC6 開(kāi)發(fā)環(huán)境,微軟提供的通用 button 控件的外觀從現(xiàn)在看來(lái)的確不太美觀,無(wú)法實(shí)現(xiàn)動(dòng)態(tài)狀態(tài)的效果。另外一種就是 Customdraw 屬性,通過(guò)定義自繪消息響應(yīng)函數(shù)來(lái)進(jìn)行重繪。最后需要將兼容 DC里的東西投射到真實(shí)的 DC里, BOOL BitBlt(HDC hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, HDC hdcSrc, int nXSrc, int nYSrc,DWORD dwRop )函數(shù)可以實(shí)現(xiàn)該功能,具體用法可參考 MSDN。主要核心技術(shù)是GDI雙緩沖繪圖。 iMessaging 就 是典型的MFC應(yīng)用程序,采用了MFC對(duì)話框設(shè)計(jì)框架,但是為了設(shè)計(jì)一個(gè)友好美觀的操作界面,僅用微軟提供的控件類(lèi)庫(kù)達(dá)不到預(yù)期的 基于局域網(wǎng)的聊天軟件的設(shè)計(jì)與實(shí)現(xiàn) 4 效果,因此,就必須重新繪制其對(duì)話框和控件的界面。 2020 年 6 月,中國(guó)移動(dòng)已經(jīng)推出了自己的即時(shí)通信工具 —— Fetion,中國(guó)聯(lián)通也將推出即時(shí)通訊工具 “ 超信 ” ,但由于進(jìn)入市場(chǎng)較晚,其用戶規(guī)模和品牌知名度還比不上原有的即時(shí)通信服務(wù)提供商。 的前身 OICQ在 1999年 2 月第一次推出,目前幾乎接近壟斷中國(guó)在線即時(shí)通訊軟件市場(chǎng)。 基于局域網(wǎng)的聊天軟件的設(shè)計(jì)與實(shí)現(xiàn) 3 即時(shí)聊天軟件 最早的創(chuàng)始人是三個(gè)以色列青年,是他們?cè)?1996 年做出來(lái)的,取名叫 ICQ。其中服務(wù)器部分進(jìn)行對(duì)會(huì)員,群數(shù)據(jù)的增添,刪除,存儲(chǔ),查詢等,并即時(shí)相應(yīng)客戶端發(fā)送而來(lái)的命令,進(jìn)行相關(guān)的數(shù)據(jù)讀寫(xiě),并返回客戶端相應(yīng)的命令消息。 2 系統(tǒng)概述 iMeassaging 即時(shí)通訊程序是基于 windows 下的聊天程序,采用 Winsock 實(shí)現(xiàn)網(wǎng)絡(luò)通訊,其設(shè)計(jì)架構(gòu)為集中式的 P2P,即服務(wù)器為中心,所有相關(guān)的核心數(shù)據(jù)全部存放在服務(wù)器上,客戶端只能按照規(guī)定的方式讀取其數(shù)據(jù)。 在中國(guó), 是目前最主流的聊天軟件,具有龐大的用戶群體,功能具有多樣化。在這 之 后 在 1980 年, UNIX/Linux 的交談即時(shí) 通訊 被廣泛的使用 于 工程師與學(xué)術(shù)界, 1990 年即時(shí)通訊更跨越了網(wǎng)際網(wǎng)路交流。目前的主流聊天工具更是將工作、娛樂(lè)、購(gòu)物整合在 了一起,逐漸發(fā)展成了綜合化的聊天軟件。在社會(huì)方面,聊天工具提供了一個(gè)交流的平臺(tái),就好比一個(gè)虛擬的社會(huì),廣大的使用者可以通過(guò)這個(gè)社會(huì)里暢所欲言,以特殊的方式營(yíng)造出了一種社會(huì)屬性。s normal life, work and study and so on. As munications, work integration, instant messaging software will be further developed into a new generation of munications software, has great prospects for development. iMessaging between LAN chat software is developed under the background that made the development of followup to explore more convenient, more diversified chat mode, with the gradual improvement of late, will increase people to study, office, munication efficiency provide a more intuitive way to chat, and chat software must be arrive at a new situation. Key words: instant messaging 基于局域網(wǎng)的聊天軟件的設(shè)計(jì)與實(shí)現(xiàn) 基于局域網(wǎng)的聊天軟件的設(shè)計(jì)與實(shí)現(xiàn) 1 1 引 言 聊天工具的出現(xiàn),促進(jìn)了網(wǎng)絡(luò)社會(huì)的形成,人們的生活世界也逐漸的劃分為真實(shí)世界和虛擬世界。即時(shí)通訊軟件給人們提供了一個(gè)交流的平臺(tái),這種平臺(tái)逐漸衍生發(fā)展成為一種特殊的社區(qū),但是脫離這樣的社區(qū)就會(huì)影響到人們的正常生活,工作和學(xué)習(xí)。隨著通信,網(wǎng)絡(luò)的整合,即時(shí)通訊軟件將進(jìn)一步發(fā)展成為新一代的通訊軟件,有著巨大的發(fā)展前景。這里的虛擬世界就是指以網(wǎng)絡(luò)為載體的生活,人們通常并不需要知道對(duì)方是誰(shuí),也不需要了解網(wǎng)絡(luò)上的資源是誰(shuí)提供的,便可以遨游于這個(gè)虛擬的世界,尋找屬于自己的天空。在教育方面,聊天工具帶給我們新式的教學(xué)體驗(yàn),使在線文字,語(yǔ)音,視頻教學(xué)成為了可能,更重要的是,人們可以分享彼此的思想和經(jīng)驗(yàn),促進(jìn)精神和教育文化的發(fā)展。人們對(duì)聊天工具的開(kāi)發(fā)與研究將不會(huì)懈怠,反而會(huì)更深入的探索其意義。 1996 年 11 月, ICQ 是首個(gè)廣泛被非 UNIX/Linux 使用者用 于 網(wǎng)路的即時(shí)通 訊軟體。 課題研究的意義 研究該課題,具有重大意義,這對(duì)于今后研究網(wǎng)絡(luò)與通信融合具有指導(dǎo)作用。該軟件主要采用 UDP 協(xié)議,但某些特殊情況也采用了 TCP 協(xié)議??蛻舳瞬糠謩t是實(shí)現(xiàn)用戶的操作界面,實(shí)現(xiàn)用戶間的聊天或者文件發(fā)送,以及群聊天等功能。 1998年當(dāng) ICQ注冊(cè)用戶數(shù)達(dá)到 1200萬(wàn)時(shí),被 AOL看中,以 。百度Hi具備文字消息、音視頻通話、文件傳輸?shù)裙δ?,您可通過(guò)它找到志同道合的朋友,并隨時(shí)與好友聯(lián)絡(luò)感情;另一類(lèi)是企業(yè)用 IM,簡(jiǎn)稱 EIM,如: E話通, UC, EC 企業(yè)即時(shí)通信軟件, UcSTAR、商務(wù)通等。 系統(tǒng)實(shí)現(xiàn)技術(shù) MFC 窗口控件重繪 MFC(Microsoft Foundation Classes),是一個(gè)微軟公司提供的類(lèi)庫(kù)( class libraries),以 C++類(lèi)的形式封裝了 Windows 的 API,并且包含一個(gè)應(yīng)用程序框架,以減少應(yīng)用程序開(kāi)發(fā)人員的工作量。而正由于微軟將這些控件封裝得很好,對(duì)于要修改它的屬性,派生一些美觀的子控件難度就顯得比較大。雙緩沖繪圖就是將待繪制的圖片保存到內(nèi)存里,當(dāng)需要繪制到屏幕上時(shí),再一次性投遞到