企業(yè)QQ系統(tǒng)開發(fā)_第1頁
企業(yè)QQ系統(tǒng)開發(fā)_第2頁
企業(yè)QQ系統(tǒng)開發(fā)_第3頁
企業(yè)QQ系統(tǒng)開發(fā)_第4頁
企業(yè)QQ系統(tǒng)開發(fā)_第5頁
已閱讀5頁,還剩56頁未讀, 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

企業(yè)QQ系統(tǒng)開發(fā)

天目學(xué)院工程技術(shù)081袁立東指導(dǎo)教師:胡建華摘要:隨著Internet應(yīng)用越來越豐富實(shí)用計(jì)算機(jī)的人增多,以簡(jiǎn)便、快速為代表的即使通訊工具也層出不窮,同時(shí),也成為當(dāng)今網(wǎng)絡(luò)應(yīng)用的主流。聊天工具作為當(dāng)今最廣泛的即時(shí)通訊工具之一,這種在線聊天工具也被廣大用戶所接受,比如,具有代表性的騰訊公司---QQ聊天軟件。本畢業(yè)設(shè)計(jì)就是基于.NET開發(fā)環(huán)境下,使用SQL.Server2005數(shù)據(jù)庫、C#編程語言開發(fā)的一個(gè)在線聊天,圖片發(fā)送,文件傳遞,視頻連接等功能的聊天工具。本文首先介紹國(guó)內(nèi)外聊天工具的發(fā)展;之后對(duì)開發(fā)環(huán)境和語言進(jìn)行簡(jiǎn)單介紹;對(duì)本畢業(yè)設(shè)計(jì)所要開發(fā)的聊天軟件做較為詳細(xì)的需求分析,并給出聊天軟件的系統(tǒng)設(shè)計(jì)方案;本畢業(yè)設(shè)計(jì)主要實(shí)現(xiàn)聊天軟件的部分功能,在線聊天,文件傳遞,視頻連接等功能的類庫模塊,和服務(wù)器端監(jiān)控用戶模塊;與設(shè)計(jì)的客戶端模塊構(gòu)成一個(gè)使用、功能完善的QQ聊天軟件;通過運(yùn)行、測(cè)試與分析來說明該即時(shí)聊天軟件的穩(wěn)定、可靠具有一定的使用價(jià)值。關(guān)鍵詞:聊天軟件;QQ聊天軟件;SQL在線聊天EnterpriseQQsystemdevelopmentAbstract:withthedevelopmentofInternetapplicationsbecomemoreandmoreabundantpracticalcomputerhasincreased,withsimple,fasttorepresentevenifthecommunicationtoolalsoemergeinanendlessstream,atthesametime,alsohasbecomethemainstreamofnetworkapplication.Chattoolsasthemostextensiveinstantcommunicationtools,thisonlinechattoolshavealsobeenacceptedbythemajorityofusers,forexample,isrepresentativeoftheTencentcompany---QQchatsoftware.ThisgraduationdesignisbasedonNETdevelopmentenvironment,usingSQL.Server2005database,C#programminglanguagetodevelopanonlinechat,email,filetransfer,videoconnectionfeaturessuchaschattools.Thisarticlefirstintroducedathomeandabroadchattooldevelopment;afterthedevelopmentenvironmentandlanguagewereintroducedbriefly;thegraduationdesigntothedevelopmentofthechatsoftwaretododetailedneedsanalysis,andgivesthechatsoftwaresystemdesign;themainchatsoftwarefunction,onlinechat,filetransfer,videoconnectionfunctionclassmodule,andservermonitoringusermodule;andthedesignoftheclientmoduleconsistsofause,improvethefunctionoftheQQchatsoftware;byrunning,testingandanalysistoillustratetherealtimechatsoftwarestability,reliabilityhasacertainvalue.Keywords:chatsoftware,chatsoftware,QQSQLonlinechat引言Internet是目前世界上最大的計(jì)算機(jī)互聯(lián)網(wǎng)絡(luò),它遍布全球,將世界各地各種規(guī)模的網(wǎng)絡(luò)連接成一個(gè)整體,它的覆蓋面積的龐大使世界從此變小,人們的信息交流也變得簡(jiǎn)單與方便。如今,人們可以通過即時(shí)聊天軟件進(jìn)行實(shí)時(shí)的溝通,從即時(shí)性、有效性和經(jīng)濟(jì)性上都超過了信件、E-Mail和電話。自從1996年11月ICQ在全球發(fā)布,拉開了互聯(lián)IM(InstantMessenger,即時(shí)通訊)應(yīng)用的序幕。ICQ一經(jīng)上市,迅速取得了廣闊的市場(chǎng),作為世界IM的鼻祖,很有意思的說,ICQ是“Iseekyou”的簡(jiǎn)稱,是以色列兩個(gè)工程師開發(fā)的,由于它的前景一片光明,所以同類軟件迅速的更進(jìn)。因?yàn)槠浔旧淼募夹g(shù)并不復(fù)雜,所以很快幾乎每個(gè)國(guó)家都退出本土的IM軟件,搶奪了市場(chǎng)。以國(guó)內(nèi)的騰訊QQ軟件為例:騰訊QQ脫胎于騰訊OICQ,而OICQ就是國(guó)內(nèi)最早出現(xiàn)的即時(shí)通訊軟件之一,軟件最初的設(shè)計(jì)完全仿照ICQ,從內(nèi)容、形式等方面完全照搬。出于國(guó)內(nèi)首創(chuàng),所以很快積累了大量的人氣,用的人越來越多,最終占領(lǐng)了國(guó)內(nèi)70%以上的市場(chǎng)。其它還有微軟的MSN、雅虎的雅虎通、網(wǎng)易泡泡、盛大圈圈、淘寶旺旺、skip等。隨著IM軟件的深入研究,它的功能早已超出了初期的即時(shí)文字聊天。以騰訊QQ為例,我們通過QQ和好友進(jìn)行交流的同時(shí),可以自定義圖片發(fā)送和接收、語音視頻面對(duì)面聊天、點(diǎn)對(duì)點(diǎn)\斷點(diǎn)續(xù)傳的文件傳輸?shù)?。事?shí)表明,現(xiàn)在的IM是一個(gè)交流互動(dòng)、休閑娛樂、語音、視頻、音樂播放、信息共享等高級(jí)功能層出不窮的即時(shí)聊天軟件。發(fā)展至今,IM軟件已經(jīng)成為現(xiàn)代人和現(xiàn)代經(jīng)濟(jì)中不可缺少的一部分。它的出現(xiàn)給人們一個(gè)彼此之間的溝通帶來了方便、人們可以通過聊天軟件建立深刻的友情,讓人們?cè)贗nternet上的交流帶來生機(jī)與活力。近年來,類似于QQ的局域網(wǎng)即時(shí)聊天工具得到了飛速發(fā)展。不管是在哪個(gè)行業(yè)里的運(yùn)用,它都能發(fā)揮其卓越的通訊功能,為企業(yè)帶來了不可估計(jì)的成本節(jié)約,其中最突出的當(dāng)然是溝通成本,作為現(xiàn)代化企業(yè),擁有適合自己的溝通方式,從而提高整體效率。企業(yè)QQ系統(tǒng)開發(fā)一:開發(fā)工具簡(jiǎn)介二:開發(fā)企業(yè)QQ系統(tǒng)的分析三:企業(yè)QQ系統(tǒng)設(shè)計(jì)四:類庫的設(shè)計(jì)五:客戶端QQ模塊設(shè)計(jì)六:服務(wù)器端模塊設(shè)計(jì)七:結(jié)論開發(fā)工具簡(jiǎn)介1.1VisualStudio1.2C#語言1.3SQLServer20051.4C/S結(jié)構(gòu)1.5UDP協(xié)議1.6SocketVisualStudioVisualStudio是一套完整的開發(fā)工具集,用于生成ASP.NETWeb應(yīng)用程序、XMLWebServices、桌面應(yīng)用程序和移動(dòng)應(yīng)用程序。VisualBasic、VisualC++、VisualC#、VisualJ#全都是用相同的集成開發(fā)環(huán)境(IDE),利用此IDE可以功效工具且有助于創(chuàng)建混合語言解決方案。VisualStudio的安裝對(duì)于電腦的體系結(jié)構(gòu)、操作系統(tǒng)、硬件都有要求。VisualStudio內(nèi)有應(yīng)用程序、Web窗體、Windows窗體、XMLWebservices、XML支持。VisualStudio目前已經(jīng)開發(fā)到9.0版本,也就是VisualStudio2008。C#語言C#(CSharp)是微軟為.NETFramework量身訂做的程序語言,C#擁有C/C++的強(qiáng)大功能以及VisualBasic簡(jiǎn)易使用的特點(diǎn),是第一個(gè)組件向?qū)У某绦蛘Z言,和C++與Java一樣亦為對(duì)象向?qū)С绦蛘Z言。C#獨(dú)有的特點(diǎn)有:簡(jiǎn)潔的語法精心的面對(duì)對(duì)象設(shè)計(jì)與Web的緊密結(jié)合完整的安全性與錯(cuò)誤處理版本處理技術(shù)靈活性與兼容性SQLServer2005SQLServer2005數(shù)據(jù)庫管理重要特點(diǎn)數(shù)據(jù)庫鏡像:通過新數(shù)據(jù)庫鏡像方法,將記錄檔案?jìng)魉托阅苓M(jìn)行延伸。在線恢復(fù):使用SQL2005版服務(wù)器,數(shù)據(jù)庫管理人員將可以在SQL服務(wù)器運(yùn)行的情況下,執(zhí)行恢復(fù)操作。在線檢索操作:在線檢索選項(xiàng)可以在指數(shù)數(shù)據(jù)定義語言(DDL)執(zhí)行期間,允許對(duì)基底表格、或集簇索引數(shù)據(jù)和任何有關(guān)的檢索,進(jìn)行同步修正??焖倩謴?fù):新的、速度更快的恢復(fù)選項(xiàng)可以改進(jìn)SQL服務(wù)器數(shù)據(jù)庫的可用性。安全性能的提高:SQLServer2005包括了一些在安全性能上的改進(jìn),例如數(shù)據(jù)庫加密、設(shè)置安全默認(rèn)值、增強(qiáng)密碼政策、縝密的許可控制、以及一個(gè)增強(qiáng)型的安全模式。新的SQLServerManagementStudio:SQLServer2005引入了SQLServerManagementStudio,這是一個(gè)新型的統(tǒng)一的管理工具組。這個(gè)工具組將包括一些新的功能,以開發(fā)、配置SQLServer數(shù)據(jù)庫,發(fā)現(xiàn)并修理其中的故障,同時(shí)這個(gè)工具組還對(duì)從前的功能進(jìn)行了一些改進(jìn)。專門的管理員連接:SQLServer2005將引進(jìn)一個(gè)專門的管理員連接,即使在一個(gè)服務(wù)器被鎖住,或者因?yàn)槠渌虿荒苁褂玫臅r(shí)候,管理員可以通過這個(gè)連接,接通這個(gè)正在運(yùn)行的服務(wù)器??煺崭綦x:我們將在數(shù)據(jù)庫層面上提供一個(gè)新的快照隔離(SI)標(biāo)準(zhǔn)。數(shù)據(jù)分割:數(shù)據(jù)分割將加強(qiáng)本地表檢索分割,這使得大型表和索引可以得到高效的管理。增強(qiáng)賦值功能:對(duì)于分布式數(shù)據(jù)庫而言,SQLServer2005提供了全面的方案修改(DDL)復(fù)制、下一代監(jiān)控性能、從甲骨文(Oracle)到SQLServer的內(nèi)置復(fù)制功能、對(duì)多個(gè)超文本傳輸協(xié)議(http)進(jìn)行合并復(fù)制,以及就合并復(fù)制的可升級(jí)性和運(yùn)行,進(jìn)行了重大的改良。C/S結(jié)構(gòu)C/S結(jié)構(gòu),即大家熟知的客戶機(jī)和服務(wù)器結(jié)構(gòu)。它是軟件系統(tǒng)體系結(jié)構(gòu),通過它可以充分利用兩端硬件環(huán)境的優(yōu)勢(shì),將任務(wù)合理分配到client端和server端來實(shí)現(xiàn),降低了系統(tǒng)的通訊開銷。目前大多數(shù)應(yīng)用軟件系統(tǒng)都是client/server形式的兩層結(jié)構(gòu),由于現(xiàn)在的軟件應(yīng)用系統(tǒng)正向分布式的Web應(yīng)用發(fā)展,Web和client/server應(yīng)用都可以進(jìn)行同樣的業(yè)務(wù)處理,應(yīng)用不同的模塊共享邏輯組件;因此,內(nèi)部的和外部的用戶都可以訪問新的和現(xiàn)有的應(yīng)用系統(tǒng),通過現(xiàn)有應(yīng)用系統(tǒng)中的邏輯可以擴(kuò)展出新的應(yīng)用系統(tǒng)。這也就是目前應(yīng)用系統(tǒng)的發(fā)展方向。Client和Server常常分別處在相距很遠(yuǎn)的兩臺(tái)計(jì)算機(jī)上,Client程序的任務(wù)是將用戶的要求提交給Server程序,再將Server程序返回的結(jié)果以特定的形式顯示給用戶;Server程序的任務(wù)是接收客戶程序提出的服務(wù)請(qǐng)求,進(jìn)行相應(yīng)的處理,再將結(jié)果返回給客戶程序UDP協(xié)議UDP協(xié)議的全稱是用戶數(shù)據(jù)報(bào)協(xié)議,在網(wǎng)絡(luò)中它與TCP協(xié)議一樣用于處理。數(shù)據(jù)包。在OSI模型中,在第四層——傳輸層,處于IP協(xié)議的上一層。UDP有不提供數(shù)據(jù)報(bào)分組、組裝和不能對(duì)數(shù)據(jù)包的排序的缺點(diǎn),也就是說,當(dāng)報(bào)文發(fā)送之后,是無法得知其是否安全完整到達(dá)的。UDP用來支持那些需要在計(jì)算機(jī)之間傳輸數(shù)據(jù)的網(wǎng)絡(luò)應(yīng)用。包括網(wǎng)絡(luò)視頻會(huì)議系統(tǒng)在內(nèi)的眾多的客戶/服務(wù)器模式的網(wǎng)絡(luò)應(yīng)用都需要使用UDP協(xié)議。UDP協(xié)議從問世至今已經(jīng)被使用了很多年,雖然其最初的光彩已經(jīng)被一些類似協(xié)議所掩蓋,但是即使是在今天,UDP仍然不失為一項(xiàng)非常實(shí)用和可行的網(wǎng)絡(luò)傳輸層協(xié)議。與所熟知的TCP協(xié)議一樣,UDP協(xié)議直接位于IP協(xié)議的頂層。根據(jù)OSI參考模型,UDP和TCP都屬于傳輸層協(xié)議。Socket

Socket用于在兩個(gè)基于TCP/IP協(xié)議的應(yīng)用程序之間相互通信。最早出現(xiàn)在UNIX系統(tǒng)中,是UNIX系統(tǒng)主要的信息傳遞方式。在windows系統(tǒng)中,socket稱為Winsock。兩個(gè)基本概念:客戶方和服務(wù)方。當(dāng)兩個(gè)應(yīng)用之間需要采用SOCKET通信時(shí),首先需要在兩個(gè)應(yīng)用之間(可能位于同一臺(tái)機(jī)器,也可能位于不同的機(jī)器)建立SOCKET連接,發(fā)起呼叫連接請(qǐng)求的一方為客戶方,接受呼叫連接請(qǐng)求的一方成為服務(wù)方。客戶方和服務(wù)方是相對(duì)的,同一個(gè)應(yīng)用可以是客戶方,也可以是服務(wù)方。在客戶方呼叫連接請(qǐng)求之前,它必須知道服務(wù)方在哪里。所以需要知道服務(wù)方所在機(jī)器的IP地址或機(jī)器名稱,如果客戶方和服務(wù)方事前有一個(gè)約定就好了,這個(gè)約定就是PORT(端口號(hào))。也就是說,客戶方可以通過服務(wù)方所在機(jī)器的IP地址或機(jī)器名稱和端口號(hào)唯一的確定方式來呼叫服務(wù)方。在客戶方呼叫之前,服務(wù)方必須處于偵聽狀態(tài),偵聽是否有客戶要求建立連接。一旦接到連接請(qǐng)求,服務(wù)方可以根據(jù)情況建立或拒絕連接。連接方式有兩種,同步方式(Blocking)和(noBlocking).客戶方發(fā)送的消息可以是文本,也可以是二進(jìn)制信息流。當(dāng)客戶方的消息到達(dá)服務(wù)方端口時(shí),會(huì)自動(dòng)觸發(fā)一個(gè)事件(event),服務(wù)方只要接管該事件,就可以接受來自客戶方的消息了。開發(fā)企業(yè)QQ系統(tǒng)的分析2.1開發(fā)企業(yè)QQ系統(tǒng)的背景2.2開發(fā)企業(yè)QQ系統(tǒng)的可行性2.3企業(yè)QQ系統(tǒng)的功能需求2.4企業(yè)QQ系統(tǒng)的性能需求2.5企業(yè)QQ系統(tǒng)的運(yùn)行環(huán)境

開發(fā)企業(yè)QQ系統(tǒng)的背景

在一些中小型企業(yè)或是學(xué)校中,為了便于職工之間的交流,信息的傳遞,局域網(wǎng)企業(yè)QQ系統(tǒng)的開發(fā)就顯得非常重要??梢愿鶕?jù)企業(yè)的內(nèi)部結(jié)構(gòu),開發(fā)一個(gè)符合本企業(yè)工作流程的QQ系統(tǒng),企業(yè)QQ可以幫助企業(yè)快速搭建內(nèi)部即時(shí)通訊系統(tǒng),大幅度提高企業(yè)的工作效率,使上級(jí)與下級(jí)之間的交流更方便。開發(fā)企業(yè)QQ系統(tǒng)的可行性因?yàn)楸驹O(shè)計(jì)利用SQLServer2005數(shù)據(jù)庫,它使用與大中規(guī)模的數(shù)據(jù)量的需求,基于.NET開發(fā)環(huán)境,只要電腦能安裝VisualStudio就能運(yùn)行本畢業(yè)設(shè)計(jì)。企業(yè)QQ系統(tǒng)的功能需求本系統(tǒng)通過客戶端、服務(wù)器端來實(shí)現(xiàn)聊天系統(tǒng)的基本功能??蛻舳耍河脩糇?cè)界面;用戶登錄界面;用戶發(fā)送、接收消息界面等。服務(wù)器端:處理用戶注冊(cè);處理用戶登錄;處理用戶退出等。企業(yè)QQ系統(tǒng)的性能需求隨著中小型企業(yè)的不斷發(fā)展,在企業(yè)內(nèi)部實(shí)現(xiàn)局域網(wǎng)通信時(shí)必不可少的。企業(yè)QQ系統(tǒng)就是一個(gè)非常好的局域網(wǎng)通信軟件,他可以進(jìn)行在線聊天、圖片發(fā)送、文件傳遞、視頻連接,還可以隨時(shí)在網(wǎng)絡(luò)中進(jìn)行多人對(duì)話或網(wǎng)絡(luò)會(huì)議。這樣,可以大大提高企業(yè)的工作效率,適于企業(yè)內(nèi)部職工的交流。企業(yè)QQ系統(tǒng)的運(yùn)行環(huán)境系統(tǒng)開發(fā)平臺(tái):MicrosoftVisualStudio2005系統(tǒng)開發(fā)語言:C#數(shù)據(jù)庫管理系統(tǒng)軟件:MicrosoftSQLServer2000系統(tǒng)運(yùn)行平臺(tái):WindowsXP(SP2)/Windows2000(SP4)/WindowsWerner2003(SP1)系統(tǒng)運(yùn)行環(huán)境:Microsoft.NETFrameworkSDKv2.0分辨率:最佳效果1024×768像素。企業(yè)QQ系統(tǒng)設(shè)計(jì)3.1企業(yè)QQ系統(tǒng)目標(biāo)3.2企業(yè)QQ系統(tǒng)功能結(jié)構(gòu)3.3企業(yè)QQ系統(tǒng)業(yè)務(wù)流程3.4數(shù)據(jù)庫的設(shè)計(jì)企業(yè)QQ系統(tǒng)目標(biāo)(1)操作簡(jiǎn)單方便,界面簡(jiǎn)潔美觀。(2)每個(gè)客戶端只能注冊(cè)一次。(3)可以在局域網(wǎng)中實(shí)現(xiàn)文字及大圖片的傳輸。(4)可以實(shí)現(xiàn)局域網(wǎng)視頻。(5)可以實(shí)現(xiàn)多用戶的信息通訊信。(6)系統(tǒng)運(yùn)行穩(wěn)定、安全可靠。企業(yè)QQ系統(tǒng)功能結(jié)構(gòu)根據(jù)企業(yè)QQ系統(tǒng)的特點(diǎn),可以將其分為客戶端和服務(wù)器端兩個(gè)部分進(jìn)行設(shè)計(jì)??蛻舳酥饕\(yùn)用與注冊(cè)、登錄和信息的發(fā)送等;服務(wù)器端主要用于顯示在線人員的狀態(tài),以及向遠(yuǎn)程客戶端發(fā)送信息的一個(gè)中轉(zhuǎn)站。企業(yè)QQ系統(tǒng)業(yè)務(wù)流程數(shù)據(jù)庫的設(shè)計(jì)3.4.1數(shù)據(jù)庫分析企業(yè)QQ系統(tǒng)的服務(wù)器端主要記錄注冊(cè)人員的信息,也就是可以在數(shù)據(jù)庫中記錄所有人員的聊天信息,本系統(tǒng)使用microsofeSQL.server2005作為后臺(tái)數(shù)據(jù)庫。數(shù)據(jù)庫名名為db_myQQdata,其中包含了一張數(shù)據(jù)表,用于存檔當(dāng)前的人員信息,以及在線人員的狀態(tài)等。3.4.2數(shù)據(jù)庫概念設(shè)計(jì)在QQ用戶登錄時(shí),為了可以在服務(wù)器端返回所有注冊(cè)用戶的信息,可以在服務(wù)器端的數(shù)據(jù)庫中創(chuàng)建一個(gè)用戶注冊(cè)表,用于記錄注冊(cè)用戶的IP地址、在線狀態(tài)、用戶名和密碼等。用戶注冊(cè)表的實(shí)體E-R圖如下:類庫的設(shè)計(jì)4.1類庫定義4.2類庫的創(chuàng)建說明類庫定義

NETFramework類庫是一個(gè)由Microsoft.NETFrameworkSDK中包含的類、接口和值類型組成的庫。該庫提供對(duì)系統(tǒng)功能的訪問,是建立.NETframework應(yīng)用程序、組件和控件的基礎(chǔ)。類庫的創(chuàng)建說明4.2.1ClassPublic類4.2.2UDPSocket控件4.2.3ClassForms類4.2.5ClassOptionData類ExSQL()方法ExSQLReDr()方法4.2.6ClassSerializers類SerializeBinary()方法DeSerializeBinary()方法4.2.7ClassUserInfo類4.2.8ClassUsers類

4.2.9ClassVideo類在開發(fā)企業(yè)QQ系統(tǒng)時(shí),為了便于客戶端與服務(wù)器端的信息通信,可以將UDP協(xié)議封裝成一個(gè)空間,或是將局域網(wǎng)中發(fā)送或接受信息的功能封裝成類。為了便于客戶端和服務(wù)器端的調(diào)用,可以將UDP控件和自定義類存儲(chǔ)在MyQQClass類庫中。ClassPublic類

該類用于記錄服務(wù)器端和客戶端的基本信息,并通過自定義方法Myosin()獲取服務(wù)器端的所有IP地址,通過自定義方法Getwindows()獲取Windows目錄。代碼如下UDPSocket控件

UDPSocket控件將UDP協(xié)議中的IP地址和端口號(hào)以控件屬性的形式進(jìn)行設(shè)置,并自定義了一個(gè)DataArrival事件,用于對(duì)主機(jī)的端口號(hào)進(jìn)行監(jiān)聽,以獲取遠(yuǎn)程計(jì)算機(jī)發(fā)送的消息。主要代碼如下:UDPSocket()和UDPSocket()方法是創(chuàng)建控件時(shí)自動(dòng)生成的,UDPSocket()方法是發(fā)是對(duì)編程者自定義命令的生成器;UDPSocket()方法是將自定義命令添加到空間中。代碼如下:OpenSocket()和CloseSocket()方法用于打開和關(guān)閉UDP協(xié)議端口號(hào)的監(jiān)聽功能,并在監(jiān)聽關(guān)閉后,關(guān)閉用于接收消息的子線程。代碼如下:Listener()方法用于實(shí)現(xiàn)主機(jī)端口號(hào)的監(jiān)聽功能,主要是在線程打開時(shí),將DetUDPData()方法所接收的消息傳遞給線程的委托。代碼如下:GetUDPData()方法是在獲取遠(yuǎn)程消息時(shí),將消息轉(zhuǎn)發(fā)給UDPSocket控件的DataArrival事件,可以通過該事件將消息發(fā)送給遠(yuǎn)程客戶端。代碼如下:Send()方法用于將主機(jī)獲取的消息,通過IP地址和端口號(hào)發(fā)送給遠(yuǎn)程客戶端。代碼如下:ClassForms類

該類將獲取的窗體在InnerList列表中進(jìn)行添加和移除的操作,并可以通過制定的索引號(hào),在列表中查找相應(yīng)的窗體。

ClassMsg類

該類主要是用枚舉型的元素值指定消息發(fā)送的命令、消息類型、消息發(fā)送的狀態(tài)等,并用[Serializable]對(duì)類進(jìn)行序列化,當(dāng)類序列化后,序列化引擎將跟蹤所有已序列化的引用對(duì)象,以確保對(duì)象不被序列化太多次。代碼如下:ClassOptionData類

該類將服務(wù)器端對(duì)數(shù)據(jù)庫的操作進(jìn)行了封裝,通過對(duì)該類中各方法的調(diào)用,可以對(duì)數(shù)據(jù)表進(jìn)行添加,修改及讀取的操作。ExSQL()方法該方法通過ConStr參數(shù)所傳遞的SQL語句,對(duì)指定數(shù)據(jù)表進(jìn)行查詢,并將記錄個(gè)數(shù)進(jìn)行返回。代碼如下:ExSQLReDr()方法該方法通過ConStr參數(shù)所傳遞的SQL語句,對(duì)指定數(shù)據(jù)表進(jìn)行查詢,并將查找到的數(shù)據(jù)信息以SqlDataReader對(duì)象進(jìn)行返回。代碼如下:ClassSerializers類

該類主要是用SerializeBinary()和DeSerializeBinary()方法,在客戶端發(fā)送或接收信息時(shí),將對(duì)象序列化成二進(jìn)制流。SerializeBinary()方法該方法是在客戶端發(fā)送信息時(shí),將發(fā)送的對(duì)象序列化成二進(jìn)制流,并返回序列化后的二進(jìn)制流,因?yàn)镾ocket只能以二進(jìn)制流的形式進(jìn)行傳輸。代碼如下:DeSerializeBinary()方法該方法是在客戶端接收信息時(shí),將二進(jìn)制流反序列化為對(duì)象,并返回反序列化后的對(duì)象,這樣,便于在指定的控件上顯示接收的信息。代碼如下:圖一圖二ClassUserInfo類

該類用于記錄當(dāng)前QQ用戶的編號(hào)、IP地址、端口號(hào)、用戶名稱和用戶狀態(tài),并對(duì)該類進(jìn)行序列化。代碼如下:ClassUsers類

該類主要是將服務(wù)器端所有注冊(cè)的用戶信息存儲(chǔ)到base類的InnerList列表中。這樣,當(dāng)用戶注冊(cè)或登錄時(shí),可以將該列表中的信息群發(fā)給當(dāng)前在線的所有用戶,以改變QQ窗體中的顯示狀況。代碼如下:ClassVideo類

該類主要是通過視頻API函數(shù),打開已安裝的視頻設(shè)備,并將視頻所拍攝的照片保存到指定的路徑上。代碼如下:客戶端QQ模塊設(shè)計(jì)

5.1客戶端QQ模塊概述5.2客戶端QQ模塊流程圖5.3客戶端QQ功能模塊的測(cè)試客戶端QQ模塊概述QQ模塊主要顯示當(dāng)前已注冊(cè)的所有用戶名稱,并根據(jù)用戶的在線情況,設(shè)置用戶名稱的圖標(biāo)樣式??蛻舳薗Q模塊流程圖客戶端:客戶端也需要?jiǎng)?chuàng)建一個(gè)線程來接收,流程圖如下:說明:1.與服務(wù)器不同,客戶端的初始化需要有服務(wù)器的IP和對(duì)應(yīng)程序的端口號(hào)。同樣也不能硬碼到程序中,需要放到配置文件中。2.為了能夠同時(shí)收發(fā)數(shù)據(jù),客戶端也需要重新創(chuàng)建一個(gè)線程。該線程的關(guān)閉需要主線程來調(diào)用子線程關(guān)閉程序來關(guān)閉。新創(chuàng)建的線程響應(yīng)程序與服務(wù)器端的服務(wù)程序類似,不同的是客戶端與服務(wù)器連接后要接收服務(wù)器端發(fā)來的所有在線用戶列表,初始化其好友。如下圖:說明:該線程的需要注意的地方是,線程的銷毀是由創(chuàng)建該線程的父線程發(fā)出命令來銷毀的??蛻舳诉\(yùn)行時(shí)先進(jìn)入登錄界面如下圖所示,在登錄界面我們可以直接登錄以前注冊(cè)好的帳號(hào),也可以點(diǎn)擊“注冊(cè)”按鈕進(jìn)入注冊(cè)界面來注冊(cè)新的用戶。說明:該界面是客戶端運(yùn)行的第一個(gè)界面,用戶可以直接登錄,將信息發(fā)送到服務(wù)器端驗(yàn)證,若輸入不合法、數(shù)據(jù)庫中沒有該用戶或密碼錯(cuò)誤等,會(huì)彈出一個(gè)提示窗口進(jìn)行提示。注冊(cè)界面如下圖所示說明:注冊(cè)界面中用戶需要輸入基本信息,但性別在該系統(tǒng)中不是關(guān)鍵信息,可不予填寫。當(dāng)用戶登錄后我們就進(jìn)入了聊天聊天程序的主界面,如下圖所示,此時(shí)我們就可以和所有在線用戶群聊天,也可以右擊某個(gè)用戶選擇和其私聊說明:1.這是該系統(tǒng)的主界面,登錄到這個(gè)界面后,用戶即可與其它用戶進(jìn)行聊天,同時(shí)其它用戶也會(huì)接到該用戶上線的通知。同樣,某個(gè)用戶下線的時(shí)候,服務(wù)器也會(huì)將信息發(fā)給其它用戶,做到了人性化的一面。2.該界面右面的樹形用戶列表,我們可以右擊用戶名查看用戶信息,也可以屏蔽該用戶的發(fā)言在本地的顯示。3.該部分還加入了其它組件,如字體設(shè)置、表情等,但由于種種原因,目前程序上還沒實(shí)現(xiàn)其功能。在主界面中我們還可以點(diǎn)擊用戶名來修改自己的信息和密碼如下圖所示說明:通過該界面用戶可以查看或修改自己的信息。服務(wù)器端模塊設(shè)計(jì)

6.1服務(wù)器端控制臺(tái)窗體6.2服務(wù)器端控制臺(tái)窗體實(shí)現(xiàn)過程服務(wù)器端控制臺(tái)窗體該窗體時(shí)客戶端與遠(yuǎn)程客戶端相互通信的一個(gè)中轉(zhuǎn)站,并且在該窗體上顯示已注冊(cè)的所有用戶信息。服務(wù)器端控制臺(tái)窗體如下圖所示服務(wù)器端控制臺(tái)窗體實(shí)現(xiàn)過程服務(wù)器端模塊要使用數(shù)據(jù)表:dbo_Users。(1)新建一個(gè)windows窗體,主要用于實(shí)現(xiàn)系統(tǒng)的登錄功能,該窗體用到的主要控件為:(2)在控制臺(tái)窗體的菜單欄中選擇“控制臺(tái)/開始服務(wù)”命令,打開UDP協(xié)議的監(jiān)聽。代碼如下:(3)在UDPSocket1控件的DataArrival事件中,對(duì)客戶端發(fā)送的消息進(jìn)行監(jiān)聽,并根據(jù)發(fā)送的消息對(duì)數(shù)據(jù)庫進(jìn)行相應(yīng)的操作。代碼如下(4)RegisterUser()方法將客戶端注冊(cè)的信息添加到數(shù)據(jù)庫中,并更新用戶列表。代碼如下(5)InsertUser()方法的主要功能是將用戶注冊(cè)的相關(guān)信息添加到數(shù)據(jù)庫的Users數(shù)據(jù)表中,并更新用戶列表。代碼如下:(6)UpdateUserList()方法的主要功能是將剛剛注冊(cè)成功的用戶信息,發(fā)送給當(dāng)前所有在線的用戶,以告知其他用戶,當(dāng)前已有人注冊(cè)。代碼如下:(7)UserLogin()方法的主要功能是當(dāng)用戶上線時(shí),更改Users數(shù)據(jù)表中相關(guān)用戶的標(biāo)識(shí),并更新用戶的在線狀態(tài)。代碼如下:參考文獻(xiàn)

C#從入門到精通(第2版)王小科,徐薇等編著/2010年07月/清華大學(xué)出版社C#項(xiàng)目開發(fā)案例全程實(shí)錄

王小科,王軍,趙會(huì)東等編著/2011年01月/清華大學(xué)出版社21天學(xué)通SQLServer

秦婧,劉存勇編著/2011年10月/電子工業(yè)出版社軟件工程基礎(chǔ)與實(shí)訓(xùn)教程杜文潔,白萍主編/2010年09月/電子工業(yè)出版社ProfessionalC#2008ChristianNagel,BillEvjen,JayGlynn,MorganSkinner,KarliWatsonJAVA技術(shù)聊天室系統(tǒng)中的開發(fā)與應(yīng)用,電腦學(xué)習(xí),白雪,陳廣山2005,23(1):15~16基于JavaSocket多客戶端并發(fā)通信聊天程序的設(shè)計(jì)與實(shí)現(xiàn),電腦知識(shí)與技術(shù),莫足琴,歐陽艷階,馬康2007,31(4):253~255Java實(shí)用程序設(shè)計(jì)100例.袁海燕,王文濤北京:人民郵電出版社,2005:226~229.基于JavaSocket網(wǎng)絡(luò)編程的一種新實(shí)現(xiàn).電腦開發(fā)與應(yīng)用,陳更力,張青2006(6):13.Web程序設(shè)計(jì)[M].賈華丁北京:高等教育出版社,2005:6~30.本人編寫的QQ系統(tǒng)代碼

importjava.awt.BorderLayout;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.io.BufferedReader;importjava.io.InputStreamReader;importjava.io.OutputStreamWriter;importjava.io.PrintWriter;import.Socket;importjavax.swing.JButton;importjavax.swing.JFrame;importjavax.swing.JOptionPane;importjavax.swing.JPanel;importjavax.swing.JScrollPane;importjavax.swing.JTextArea;importjavax.swing.JTextField;publicclassChatClientFrameextendsJFrame{privateJTextAreatextArea=newJTextArea();privateJScrollPanescroll=newJScrollPane(textArea);privateJTextFieldtextField=newJTextField();privateJButtonbtn=newJButton("發(fā)送");privateJPanelpanel=newJPanel();privateSocketsocket;

publicChatClientFrame()throwsException{add(scroll);panel.setLayout(newBorderLayout());panel.add(textField);panel.add(btn,BorderLayout.EAST);add(panel,BorderLayout.SOUTH);setSize(200,300);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);Strings=JOptionPane.showInputDialog("請(qǐng)輸入ip:port");String[]arr=s.split(":");socket=newSocket(arr[0],Integer.parseInt(arr[1]));finalSocketHandlerh=newSocketHandler(socket);newThread(h).start();btn.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvente){Strings=textField.getText();if(null!=s&&!"".equals(s)){h.send(s);textField.setText("");}}});classSocketHandlerimplementsRunnable{privateSocketsocket;privateBufferedReaderin;privatePrintWriterout;publicSocketHandler(Socketsocket)throwsException{this.socket=socket;this.in=newBufferedReader(newInputStreamReader(socket.getInputStream()));this.out=newPrintWriter(newOutputStreamWriter(socket.getOutputStream()));}publicvoidsend(Strings){out.println(s);out.flush();}publicvoidrun(){try{Stringline;while((line=in.readLine())!=null){textArea.append(line);

textArea.append("\n");}}catch(Exceptione){}textArea.append("已經(jīng)與服務(wù)器斷開連接");textArea.append("\n");}}

publicstaticvoidmain(String[]args)throwsException{newChatClientFrame().setVisible(true);}}importjava.io.BufferedReader;importjava.io.InputStreamReader;importjava.io.OutputStreamWriter;importjava.io.PrintWriter;import.ServerSocket;import.Socket;importjava.util.ArrayList;importjava.util.List;importjava.util.concurrent.ExecutorService;importjava.util.concurrent.Executors;publicclassChatServer{privateServerSocketss;privateList<SocketHandler>clientList=newArrayList<SocketHandler>();privateExecutorServicepool=Executors.newCachedThreadPool();

publicChatServer(intport)throwsException{ss=newServerSocket(port);Runnabler=newRunnable(){publicvoidrun(){try{while(true){Sockets=ss.accept();SocketHandlerh=newSocketHandler(s);pool.execute(h);//在線程內(nèi)執(zhí)行接收數(shù)據(jù)

clientList.add(h);}}catch(Exceptione){System.out.println("服務(wù)器已經(jīng)停止");}}};pool.execute(r);//在線程內(nèi)執(zhí)行accept

}

classSocketHandlerimplementsRunnable{Sockets;BufferedReaderin;PrintWriterout;publicSocket

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論