版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、即時(shí)消息系統(tǒng)-本科畢業(yè)設(shè)計(jì)摘要隨著網(wǎng)絡(luò)通信技術(shù)和計(jì)算機(jī)技術(shù)的進(jìn)一步發(fā)展,即時(shí)消息正在成為網(wǎng)絡(luò)在線活動(dòng)中不可缺少的業(yè)務(wù)。本課題在現(xiàn)有的網(wǎng)絡(luò)通信技術(shù)、數(shù)據(jù)庫技術(shù)和編程技術(shù)的基礎(chǔ)上設(shè)計(jì)并實(shí)現(xiàn)了網(wǎng)絡(luò)即時(shí)消息系統(tǒng)。該系統(tǒng)采用三層C/S網(wǎng)絡(luò)系統(tǒng)構(gòu)架,采用多線程實(shí)現(xiàn)服務(wù)器的并發(fā)處理,采用ODBC接口訪問SQL Server2000數(shù)據(jù)庫設(shè)計(jì)數(shù)據(jù)管理模塊,采用J2SE平臺(tái)和java語言去開發(fā)系統(tǒng)。該系統(tǒng)按照軟件工程思想采用面向?qū)ο蠛湍K化設(shè)計(jì)方法設(shè)計(jì),其中采用了網(wǎng)絡(luò)通信技術(shù)、數(shù)據(jù)庫技術(shù)、多線程技術(shù)等計(jì)算機(jī)技術(shù),實(shí)現(xiàn)了網(wǎng)絡(luò)通信的基本功能,具有通信即時(shí)性的特點(diǎn)。在論文中,我們將會(huì)討論網(wǎng)絡(luò)即時(shí)消息系統(tǒng)的現(xiàn)狀和發(fā)展,
2、研究實(shí)現(xiàn)此系統(tǒng)的技術(shù)背景。然后我們對(duì)系統(tǒng)進(jìn)行需求分析。按照要求,我們將進(jìn)行總體設(shè)計(jì)和詳細(xì)設(shè)計(jì),如服務(wù)器端的設(shè)計(jì),數(shù)據(jù)庫的設(shè)計(jì)和客戶端的設(shè)計(jì)。最后實(shí)現(xiàn)系統(tǒng)的配置和使用。本畢業(yè)設(shè)計(jì)所完成的網(wǎng)絡(luò)即時(shí)消息系統(tǒng)的主要功能如下:1.服務(wù)器端:后臺(tái)啟動(dòng)、監(jiān)視用戶和發(fā)送系統(tǒng)消息;2.用戶登錄和注冊(cè);3.好友管理:查找好友、添加好友和刪除好友;4.通信:發(fā)送消息、接收消息和聊天記錄5.上線和隱身。關(guān)鍵詞:即時(shí)消息系統(tǒng),C/S三層結(jié)構(gòu),TCP/IP,J2SE平臺(tái)AbstractWith the further development of network communication technology and
3、computer technology, Instant Messaging has been arequirement of on-line activities. This projectdesign and implementation,the instant messaging based on the topic of the existing network communication technology, database technology and programming technology.This system uses composite structure of
4、three-tier C/S to design system architecture, uses multi-threading to implement servers parallel processing, uses ODBC interface to access to SQL Server database to design data management module, uses J2SE(Java 2 Standard Edition) and Object-orientedprogramming language,java,to develop the system.Th
5、is system is designed by object-oriented and modular design method, which used computer technologies based on network communication technology, database technology, Multi-threading technology, software reuse and so on, this system has basic functions ofnetwork communication, , and has features of in
6、stant.In my dissertation,we will discuss thestatusand development of network instant messenger,and research in the relevant technology background.After that we will analyse therequirement of the system. With the requirement analysis,we will make thegeneral design and detailed design,such as server d
7、esign ,database design and client design.In the last part ,we will implement the system and put it into practice.The system has completed the following major functions:1Server:Startup,surveillance and send systemic message.;2User management: registration login and logout;3Friend management: find ,ad
8、d and delete;4Communication:sending message,receriving message and receiving system message;5Online and hide.Key Words:Instant Messenger,C/SThree-layer Construction,TCP/IP,J2SE Platform目錄摘要Abstract目錄第一章緒論1.1選題背景1.1.1即時(shí)消息系統(tǒng)的研究現(xiàn)狀1.1.2即時(shí)消息系統(tǒng)的發(fā)展趨勢1.1.3論文研究的主要內(nèi)容1.2技術(shù)背景1.2.1 C/S模型1.2.2 TCP/IP協(xié)議1.2.3編程技術(shù)第二
9、章系統(tǒng)分析與設(shè)計(jì)2.1需求分析2.2系統(tǒng)總體框架2.2.1總體設(shè)計(jì)2.2.2功能模塊2.3系統(tǒng)詳細(xì)設(shè)計(jì)2.3.1多線程設(shè)計(jì)2.3.2數(shù)據(jù)庫設(shè)計(jì)2.3.3服務(wù)器的設(shè)計(jì)2.3.4客戶端的設(shè)計(jì)2.3.5消息通信的設(shè)計(jì)第三章系統(tǒng)實(shí)現(xiàn)3.1數(shù)據(jù)庫部署3.1.1建立數(shù)據(jù)庫3.1.2配置ODBC數(shù)據(jù)源3.2開發(fā)環(huán)境3.2.1構(gòu)建Java SE平臺(tái)3.2.2安裝開發(fā)工具 eclipse3.3服務(wù)器端的實(shí)現(xiàn)3.3.1啟動(dòng)服務(wù)器后臺(tái)3.3.3發(fā)送系統(tǒng)消息3.4客戶端的實(shí)現(xiàn)3.4.1用戶注冊(cè)3.4.2登錄3.4.3程序主界面3.4.3添加好友3.4.4上線與隱身3.4.5聊天通信第四章總結(jié)參考文獻(xiàn)致謝第一章緒論1.
10、1選題背景1.1.1即時(shí)消息系統(tǒng)的研究現(xiàn)狀即時(shí)消息系統(tǒng)1(Instant Messenger,IM)是一種在后PC時(shí)代興起的,以Internet網(wǎng)絡(luò)為基礎(chǔ)的,允許交互雙方即時(shí)地傳送文字、語音、視頻等信息,能夠跟蹤網(wǎng)絡(luò)用戶在線狀態(tài)的網(wǎng)絡(luò)應(yīng)用軟件。即時(shí)消息系統(tǒng)產(chǎn)生有著深刻的社會(huì)原因:人們都有渴望社交,獲得社會(huì)尊重、實(shí)現(xiàn)自我的需求,這正是即時(shí)消息軟件風(fēng)行的原動(dòng)力,而物質(zhì)文明的日益發(fā)達(dá)所帶來副作用,又使得人們習(xí)慣與周圍的人保持距離,以致人們更愿意對(duì)陌生人敞開心扉,在網(wǎng)絡(luò)中可以跨越年齡、身份、行業(yè)、地域的限制,達(dá)到人與人、人與信息之間的零距離交流。從這點(diǎn)上講,即時(shí)消息系統(tǒng)的出現(xiàn)改變了人們的溝通方式和交友
11、文化,大大拓展了個(gè)人生活交流的空間。國內(nèi)最為流行的即時(shí)消息軟件是OICQ(簡稱QQ) 。它以良好的中文界面和不斷增強(qiáng)的功能形成了一定的QQ網(wǎng)絡(luò)文化。該軟件是由騰訊公司于1999年2月自主開發(fā)的基于Internet的即時(shí)消息系統(tǒng)。騰訊QQ目前已成為中國最主要的即時(shí)消息服務(wù)網(wǎng)絡(luò)軟件。作為一種即時(shí)消息工具,QQ支持顯示好友在線、即時(shí)傳送文字、語音和文件等功能。QQ還與無線尋呼、GSM短信息、IP電話網(wǎng)互聯(lián),為用戶提供互聯(lián)網(wǎng)短信及信息增值服務(wù)。騰訊QQ開發(fā)和拓展統(tǒng)一、高速、豐富的互聯(lián)網(wǎng)應(yīng)用平臺(tái)、在線廣告業(yè)務(wù)、移動(dòng)通信業(yè)務(wù)、ISP及IP電話合作業(yè)務(wù)、企業(yè)商用即時(shí)消息服務(wù)、在線客戶支持及在線呼叫業(yè)務(wù)。1.
12、1.2即時(shí)消息系統(tǒng)的發(fā)展趨勢21世紀(jì)將是網(wǎng)絡(luò)化、信息化的世紀(jì),信息的融合已經(jīng)成為社會(huì)發(fā)展的主流方向2。即時(shí)消息系統(tǒng)將不斷與信息交流領(lǐng)域的系統(tǒng)相互集成和滲透,擴(kuò)展其自己的功能和應(yīng)用范圍,滿足未來話音,數(shù)據(jù)和視頻的多媒體應(yīng)用需要,使即時(shí)消息以更豐富的接入方法,更高的服務(wù)質(zhì)量,更友好的面貌呈現(xiàn)在世人的面前。從功能角度來看,即時(shí)消息系統(tǒng)向支持全媒體方向發(fā)展,隨著多媒體技術(shù)在網(wǎng)絡(luò)應(yīng)用中的發(fā)展,即時(shí)消息系統(tǒng)承載的媒體,不再局限于原來的文字、語音和文件的信息交換,信息載體擴(kuò)展到圖形、圖像和流媒體等多媒體業(yè)務(wù)上。目前ICQ和QQ預(yù)設(shè)了部分簡單的表情圖像, 通過傳輸圖像代碼來傳遞表情圖像,可以被視為即時(shí)消息開發(fā)
13、商開發(fā)支持圖形、圖像為載體的即時(shí)消息軟件的開端。從應(yīng)用范圍角度來看,即時(shí)消息系統(tǒng)集中在Internet個(gè)人用戶之間的信息交流應(yīng)用,隨著網(wǎng)絡(luò)技術(shù)應(yīng)用的發(fā)展,即時(shí)消息系統(tǒng)應(yīng)用范圍向園區(qū)化、集團(tuán)化拓展,應(yīng)用領(lǐng)域突破個(gè)人,而用于遠(yuǎn)程教學(xué)、遠(yuǎn)程醫(yī)療、遠(yuǎn)程演示、網(wǎng)絡(luò)會(huì)議等領(lǐng)域。1.1.3論文研究的主要內(nèi)容本論文的主要工作是利用編程技術(shù)建立一基于J2SE的即時(shí)消息系統(tǒng),主要實(shí)現(xiàn)網(wǎng)絡(luò)即時(shí)聊天功能。在建立這個(gè)系統(tǒng)的過程中,我將會(huì)研究JAVA語言,多線程編程、網(wǎng)絡(luò)編程以及數(shù)據(jù)據(jù)等方面的知識(shí)。在我的論文中,我將會(huì)研究即時(shí)消息的發(fā)展,并針對(duì)不同即時(shí)消息工具之間不能互通的弊端,介紹即時(shí)消息系統(tǒng)中的應(yīng)用。為了更好地實(shí)現(xiàn)系
14、統(tǒng),我們還要研究J2SE技術(shù)。在論文中介紹了J2SE的體系結(jié)構(gòu)、系統(tǒng)設(shè)計(jì)以及J2SE的開發(fā)環(huán)境。熟悉了開發(fā)平臺(tái),我們還要了解 基于TCP/IP的Socket網(wǎng)絡(luò)連接的基礎(chǔ)知識(shí),包括網(wǎng)絡(luò)通信系統(tǒng)架構(gòu)及Socket通信在該系統(tǒng)中的應(yīng)用等內(nèi)容。在論文中將著重介紹網(wǎng)絡(luò)即時(shí)消息系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn),包括界面及各個(gè)功能模塊的設(shè)計(jì),給出了相應(yīng)的流程圖并對(duì)其功能做了詳細(xì)描述,最終實(shí)現(xiàn)了客戶端之間的即時(shí)聊天通信功能。最后是結(jié)尾部分,對(duì)本文做了總結(jié)并針對(duì)該系統(tǒng)提出了一些不足和今后需要改進(jìn)的地方。1.2技術(shù)背景1.2.1C/S模型在網(wǎng)絡(luò)連接模式中,除對(duì)等網(wǎng)外,還有另一種形式的網(wǎng)絡(luò),即客戶機(jī)/服務(wù)器網(wǎng)3,Client/S
15、erver。在客戶機(jī)/服務(wù)器網(wǎng)絡(luò)中,服務(wù)器是網(wǎng)絡(luò)的核心,而客戶機(jī)是網(wǎng)絡(luò)的基礎(chǔ),客戶機(jī)依靠服務(wù)器獲得所需要的網(wǎng)絡(luò)資源,而服務(wù)器為客戶機(jī)提供網(wǎng)絡(luò)必須的資源。這里客戶和服務(wù)器都是指通信中所涉及的兩個(gè)應(yīng)用進(jìn)程(軟件)。使用計(jì)算機(jī)的人是計(jì)算機(jī)的“用戶”(user)而不是“客戶”(client)。但在許多國外文獻(xiàn)中,也經(jīng)常把運(yùn)行客戶程序的機(jī)器稱為client(這種情況下也可把client譯為“客戶機(jī)”),把運(yùn)行服務(wù)器程序的機(jī)器稱為server。所以有時(shí)要根據(jù)上下文判斷client與server是指軟件還是硬件。它是軟件系統(tǒng)體系結(jié)構(gòu),通過它可以充分利用兩端硬件環(huán)境的優(yōu)勢,將任務(wù)合理分配到Client端和Se
16、rver端來實(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ā)展方向。1.2.2TCP/IP協(xié)議1. IP網(wǎng)際協(xié)議IP是TCP/IP的心臟,也是網(wǎng)絡(luò)層中最重要的協(xié)議4。IP層接收由更低層(網(wǎng)絡(luò)接口層例如以太網(wǎng)設(shè)備驅(qū)動(dòng)程序)發(fā)來的數(shù)據(jù)包,并把該數(shù)據(jù)包發(fā)送到更高層-TCP或UDP層;相
17、反,IP層也把從TCP或UDP層接收來的數(shù)據(jù)包傳送到更低層。IP數(shù)據(jù)包是不可靠的,因?yàn)镮P并沒有做任何事情來確認(rèn)數(shù)據(jù)包是按順序發(fā)送的或者沒有被破壞。IP數(shù)據(jù)包中含有發(fā)送它的主機(jī)的地址(源地址)和接收它的主機(jī)的地址(目的地址)。高層的TCP和UDP服務(wù)在接收數(shù)據(jù)包時(shí),通常假設(shè)包中的源地址是有效的。也可以這樣說,IP地址形成了許多服務(wù)的認(rèn)證基礎(chǔ),這些服務(wù)相信數(shù)據(jù)包是從一個(gè)有效的主機(jī)發(fā)送來的。IP確認(rèn)包含一個(gè)選項(xiàng),叫作IP source routing,可以用來指定一條源地址和目的地址之間的直接路徑。對(duì)于一些TCP和UDP的服務(wù)來說,使用了該選項(xiàng)的IP包好像是從路徑上的最后一個(gè)系統(tǒng)傳遞過來的,而不是
18、來自于它的真實(shí)地點(diǎn)。這個(gè)選項(xiàng)是為了測試而存在的,說明了它可以被用來欺騙系統(tǒng)來進(jìn)行平常是被禁止的連接。那么,許多依靠IP源地址做確認(rèn)的服務(wù)將產(chǎn)生問題并且會(huì)被非法入侵。2. TCP如果IP數(shù)據(jù)包中有已經(jīng)封好的TCP數(shù)據(jù)包5,那么IP將把它們向上傳送到TCP層。TCP將包排序并進(jìn)行錯(cuò)誤檢查,同時(shí)實(shí)現(xiàn)虛電路間的連接。TCP數(shù)據(jù)包中包括序號(hào)和確認(rèn),所以未按照順序收到的包可以被排序,而損壞的包可以被重傳。TCP將它的信息送到更高層的應(yīng)用程序,例如Telnet的服務(wù)程序和客戶程序。應(yīng)用程序輪流將信息送回TCP層,TCP層便將它們向下傳送到IP層,設(shè)備驅(qū)動(dòng)程序和物理介質(zhì),最后到接收方。面向連接的服務(wù)(例如Te
19、lnet、FTP、rlogin、X Windows和SMTP)需要高度的可靠性,所以它們使用了TCP。DNS在某些情況下使用TCP(發(fā)送和接收域名數(shù)據(jù)庫),但使用UDP傳送有關(guān)單個(gè)主機(jī)的信息。3. UDPUDP與TCP位于同一層,但它不管數(shù)據(jù)包的順序、錯(cuò)誤或重發(fā)。因此,UDP不被應(yīng)用于那些使用虛電路的面向連接的服務(wù),UDP主要用于那些面向查詢-應(yīng)答的服務(wù),例如NFS。相對(duì)于FTP或Telnet,這些服務(wù)需要交換的信息量較小。使用UDP的服務(wù)包括NTP(網(wǎng)絡(luò)時(shí)間協(xié)議)和DNS(DNS也使用TCP)。 欺騙UDP包比欺騙TCP包更容易,因?yàn)閁DP沒有建立初始化連接(也可以稱為握手)(因?yàn)樵趦蓚€(gè)系統(tǒng)
20、間沒有虛電路),也就是說,與UDP相關(guān)的服務(wù)面臨著更大的危險(xiǎn)。4. TCP與UDP的端口結(jié)構(gòu)TCP和UDP服務(wù)通常有一個(gè)客戶/服務(wù)器的關(guān)系,例如,一個(gè)Telnet服務(wù)進(jìn)程開始在系統(tǒng)上處于空閑狀態(tài),等待著連接。用戶使用Telnet客戶程序與服務(wù)進(jìn)程建立一個(gè)連接。客戶程序向服務(wù)進(jìn)程寫入信息,服務(wù)進(jìn)程讀出信息并發(fā)出響應(yīng),客戶程序讀出響應(yīng)并向用戶報(bào)告。因而,這個(gè)連接是雙工的,可以用來進(jìn)行讀寫。兩個(gè)系統(tǒng)間的多重Telnet連接是如何相互確認(rèn)并協(xié)調(diào)一致呢?TCP或UDP連接唯一地使用每個(gè)信息中的如下四項(xiàng)進(jìn)行確認(rèn):l源IP地址:發(fā)送包的IP地址;l目的IP地址:接收包的IP地址;l源端口:源系統(tǒng)上的連接的端
21、口;l目的端口:目的系統(tǒng)上的連接的端口。端口是一個(gè)軟件結(jié)構(gòu),被客戶程序或服務(wù)進(jìn)程用來發(fā)送和接收信息。一個(gè)端口對(duì)應(yīng)一個(gè)16比特的數(shù)。服務(wù)進(jìn)程通常使用一個(gè)固定的端口,例如,SMTP使用25、Xwindows使用6000。這些端口號(hào)是廣為人知的,因?yàn)樵诮⑴c特定的主機(jī)或服務(wù)的連接時(shí),需要這些地址和目的地址進(jìn)行通訊1.2.3編程技術(shù)1.JAVA語言Java6是由Sun Microsystems公司于1995年5月推出的Java程序設(shè)計(jì)語言(以下簡稱Java語言)和Java平臺(tái)的總稱。用Java實(shí)現(xiàn)的HotJava瀏覽器(支持Java applet)顯示了Java的魅力:跨平臺(tái)、動(dòng)態(tài)的Web、Inter
22、net計(jì)算。從此,Java被廣泛接受并推動(dòng)了Web的迅速發(fā)展,常用的瀏覽器現(xiàn)在均支持Java applet。另一方面,Java技術(shù)也不斷更新。Java語言的優(yōu)良特性使得Java應(yīng)用具有無比的健壯性和可靠性,這也減少了應(yīng)用系統(tǒng)的維護(hù)費(fèi)用。Java對(duì)對(duì)象技術(shù)的全面支持和Java平臺(tái)內(nèi)嵌的API7能縮短應(yīng)用系統(tǒng)的開發(fā)時(shí)間并降低成本。Java的編譯一次,到處可運(yùn)行的特性使得它能夠提供一個(gè)隨處可用的開放結(jié)構(gòu)和在多平臺(tái)之間傳遞信息的低成本方式。特別是Java企業(yè)應(yīng)用編程接口(Java Enterprise APIs)為企業(yè)計(jì)算及電子商務(wù)應(yīng)用系統(tǒng)提供了有關(guān)技術(shù)和豐富的類庫。2. WinsockWindows
23、下網(wǎng)絡(luò)編程的規(guī)范Windows Sockets是Windows下得到廣泛應(yīng)用的、開放的、支持多種協(xié)議的網(wǎng)絡(luò)編程接口。 通信的基礎(chǔ)是套接口(Socket),一個(gè)套接口是通訊的一端。在這一端上你可以找到與其對(duì)應(yīng)的一個(gè)名字。一個(gè)正在被使用的套接口都有它的類型和與其相關(guān)的進(jìn)程。套接口存在于通訊域中。通訊域是為了處理一般的線程通過套接口通訊而引進(jìn)的一種抽象概念。在一次網(wǎng)絡(luò)通信/連接中有以下幾個(gè)參數(shù)需要被設(shè)置:本地IP地址-本地端口號(hào)-對(duì)方端口號(hào)-對(duì)方IP地址。左邊兩部分稱為一個(gè)半關(guān)聯(lián),當(dāng)與右邊兩部分建立連接后就稱為一個(gè)全關(guān)聯(lián)。在這個(gè)全關(guān)聯(lián)的套接口上可以雙向的交換數(shù)據(jù)。如果是使用無連接的通信則只需要建立一
24、個(gè)半關(guān)聯(lián),在發(fā)送和接收時(shí)指明另一半的參數(shù)就可以了,所以可以說無連接的通信是將數(shù)據(jù)發(fā)送到另一臺(tái)主機(jī)的指定端口。此外不論是有連接還是無連接的通信都不需要雙方的端口號(hào)相同。Socket接口是訪問Internet使用得最廣泛的方法。3.多線程編程多線程8是為了使得多個(gè)線程并行的工作以完成多項(xiàng)任務(wù),以提高系統(tǒng)的效率。線程是在同一時(shí)間需要完成多項(xiàng)任務(wù)的時(shí)候被實(shí)現(xiàn)的。使用線程的好處有以下幾點(diǎn):使用線程可以把占據(jù)長時(shí)間的程序中的任務(wù)放到后臺(tái)去處理用戶界面可以更加吸引人,這樣比如用戶點(diǎn)擊了一個(gè)按鈕去觸發(fā)某些事件的處理,可以彈出一個(gè)進(jìn)度條來顯示處理的進(jìn)度程序的運(yùn)行速度可能加快在一些等待的任務(wù)實(shí)現(xiàn)上如用戶輸入、文件
25、讀寫和網(wǎng)絡(luò)收發(fā)數(shù)據(jù)等,線程就比較有用了。在這種情況下我們可以釋放一些珍貴的資源如內(nèi)存占用等等。多線程在JAVA里面的應(yīng)用也是很廣泛。Java對(duì)多線程的支持是非常強(qiáng)大的,他屏蔽掉了許多的技術(shù)細(xì)節(jié),讓我們可以輕松的開發(fā)多線程的應(yīng)用程序。1.2.4開發(fā)平臺(tái)1. J2SE平臺(tái)Java2平臺(tái)包括:標(biāo)準(zhǔn)版(J2SE)、企業(yè)版(J2EE)和微縮版(J2ME)三個(gè)版本。J2SE,J2ME和J2EE,這也就是SunONE(Open NetEnvironment)體系。J2SE就是Java2的標(biāo)準(zhǔn)版,主要用于桌面應(yīng)用軟件的編程;J2ME主要應(yīng)用于嵌入是系統(tǒng)開發(fā),如手機(jī)和PDA的編程;J2EE是Java2的企業(yè)版,
26、主要用于分布式的網(wǎng)絡(luò)程序的開發(fā),如電子商務(wù)網(wǎng)站和ERP系統(tǒng)。Standard Edition(標(biāo)準(zhǔn)版) J2SE包含那些構(gòu)成Java語言核心的類。比如:數(shù)據(jù)庫連接、接口定義、輸入/輸出、網(wǎng)絡(luò)編程定位在客戶端,主要用于桌面應(yīng)用軟件的編程。J2SE包含那些構(gòu)成Java語言核心的類。 比如:數(shù)據(jù)庫連接、接口定義、輸入/輸出、網(wǎng)絡(luò)編程2. SQL SERVER數(shù)據(jù)庫SQL Server 20009的特性Microsoft SQL Server 2000的特性包括:Internet集成。SQL Server 2000數(shù)據(jù)庫引擎提供完整的XML支持。它還具有構(gòu)成最大的Web站點(diǎn)的數(shù)據(jù)存儲(chǔ)組件所需的可伸縮性
27、、可用性和安全功能。SQL Server 2000程序設(shè)計(jì)模型與Windows DNA構(gòu)架集成,用以開發(fā)Web應(yīng)用程序,并且SQL Server 2000支持English Query和Microsoft搜索服務(wù)等功能,在Web應(yīng)用程序中包含了用戶友好的查詢和強(qiáng)大的搜索功能??缮炜s性和可用性。 同一個(gè)數(shù)據(jù)庫引擎可以在不同的平臺(tái)上使用,從運(yùn)行Microsoft Windows 98的便攜式電腦,到運(yùn)行Microsoft Windows 2000數(shù)據(jù)中心版的大型多處理器服務(wù)器。SQL Server 2000企業(yè)版支持聯(lián)合服務(wù)器、索引視圖和大型內(nèi)存支持等功能,使其得以升級(jí)到最大Web站點(diǎn)所需的性能級(jí)
28、別。企業(yè)級(jí)數(shù)據(jù)庫功能。SQL Server 2000關(guān)系數(shù)據(jù)庫引擎支持當(dāng)今苛刻的數(shù)據(jù)處理環(huán)境所需的功能。數(shù)據(jù)庫引擎充分保護(hù)數(shù)據(jù)完整性,同時(shí)將管理上千個(gè)并發(fā)修改數(shù)據(jù)庫的用戶的開銷減到最小。SQL Server 2000分布式查詢使您得以引用來自不同數(shù)據(jù)源的數(shù)據(jù),就好象這些數(shù)據(jù)是SQL Server 2000數(shù)據(jù)庫的一部分,同時(shí)分布式事務(wù)支持充分保護(hù)任何分布式數(shù)據(jù)更新的完整性。復(fù)制同樣使您得以維護(hù)多個(gè)數(shù)據(jù)復(fù)本,同時(shí)確保單獨(dú)的數(shù)據(jù)復(fù)本保持同步??蓪⒁唤M數(shù)據(jù)復(fù)制到多個(gè)移動(dòng)的脫接用戶,使這些用戶自主地工作,然后將他們所做的修改合并回發(fā)布服務(wù)器。易于安裝、部署和使用。SQL Server 2000中包括一
29、系列管理和開發(fā)工具,這些工具可改進(jìn)在多個(gè)站點(diǎn)上安裝、部署、管理和使用SQL Server的過程。SQL Server 2000還支持基于標(biāo)準(zhǔn)的、與Windows DNA集成的程序設(shè)計(jì)模型,使SQL Server數(shù)據(jù)庫和數(shù)據(jù)倉庫的使用成為生成強(qiáng)大的可伸縮系統(tǒng)的無縫部分。這些功能使您得以快速交付SQL Server應(yīng)用程序,使客戶只需最少的安裝和管理開銷即可實(shí)現(xiàn)這些應(yīng)用程序。第二章系統(tǒng)分析與設(shè)計(jì)2.1需求分析此次開發(fā)的網(wǎng)絡(luò)聊天工具可作為個(gè)人的交流工具使用,通信的安全性不是很高,但要求信息的響應(yīng)速度要較快,讓用戶充分享受到網(wǎng)絡(luò)即時(shí)消息的方便和快捷。本聊天工具由服務(wù)器端程序和客戶端程序兩部分組成,整體
30、采用JAVA平臺(tái)開發(fā),并使用SQL Server 2000管理數(shù)據(jù)庫數(shù)據(jù)。服務(wù)器是可以監(jiān)聽和查看用戶的基本操作;客戶端程序面向?qū)嶋H用戶,它有必要的界面的按鈕,向用戶提供網(wǎng)絡(luò)即時(shí)消息的功能:本聊天需包含如下基本功能:1.客戶端:(1)新用戶注冊(cè);(2)用戶登錄驗(yàn)證;(3)獲取好友列表并顯示好友狀態(tài)(在線/不在線);(4)添加用戶好友;(5)刪除用戶好友;(6)用戶與好友聊天(可查看聊天記錄);(7)接收系統(tǒng)信息。2.服務(wù)端:(1)啟動(dòng)和關(guān)閉后臺(tái)服務(wù)器;(2)查看客戶端登錄的相關(guān)信息(客戶端登陸時(shí)間/登陸IP);(3)向所有在線用戶發(fā)送系統(tǒng)消息。2.2系統(tǒng)總體框架2.2.1總體設(shè)計(jì)網(wǎng)絡(luò)即時(shí)通訊系統(tǒng)
31、采用客戶機(jī)/服務(wù)器(C/S)的模式來設(shè)計(jì),是一個(gè)3層的C/S結(jié)構(gòu):數(shù)據(jù)庫服務(wù)器應(yīng)用程序服務(wù)器端應(yīng)用程序客戶端。系統(tǒng)采用C/S結(jié)構(gòu),可以將任務(wù)合理分配到客戶機(jī)端和服務(wù)器端,從而降低了系統(tǒng)的通信開銷,如圖3.1所示:圖3.1C/S體系結(jié)構(gòu)1.客戶層客戶層也叫應(yīng)用層,是應(yīng)用程序的用戶接口部分。給聊天工具設(shè)計(jì)一個(gè)客戶層具有很多優(yōu)點(diǎn),這是因?yàn)榭蛻魧訐?dān)負(fù)著用戶與應(yīng)用間的對(duì)話功能。它用于檢查用戶的輸入數(shù)據(jù),顯示應(yīng)用的輸出數(shù)據(jù)。為了使用戶能直觀地進(jìn)行操作,客戶層需要合作圖形用戶接口。若聊天用戶變更,系統(tǒng)只需要改寫顯示控制和數(shù)據(jù)檢查程序即可,而不影響其他兩層。數(shù)據(jù)檢查的內(nèi)容限于數(shù)據(jù)的形式和值的范圍,不包括有關(guān)業(yè)
32、務(wù)本身的處理邏輯。2服務(wù)層服務(wù)層也叫功能層,相當(dāng)于應(yīng)用的本體,它是將具體的業(yè)務(wù)處理邏輯編入程序中。例如,用戶需要檢索數(shù)據(jù),系統(tǒng)設(shè)法將有關(guān)檢索要求的信息一次性地傳送給功能層;而用戶登錄后,聊天登錄信息是由功能層處理過的檢索結(jié)果數(shù)據(jù),它也是一次性傳送給表示層的。在應(yīng)用設(shè)計(jì)中,必須避免表示層和功能層之間進(jìn)行多次的數(shù)據(jù)交換,這就需要盡可能進(jìn)行一次性的業(yè)務(wù)處理,達(dá)到優(yōu)化整體設(shè)計(jì)的目的。3.數(shù)據(jù)層據(jù)層就是DBMS,本系統(tǒng)使用了Microsoft公司的SQL Server 2000數(shù)據(jù)庫服務(wù)器來管理數(shù)據(jù)。SQL Server 2000能迅速執(zhí)行大量數(shù)據(jù)的更新和檢索。因此,從功能層傳送到數(shù)據(jù)層的“要求”一般都
33、使用SQL語言。2.2.2功能模塊聊天工具按如下過程完成通信:l客戶向服務(wù)器注冊(cè),告知服務(wù)器它在監(jiān)聽某主題;l客戶注冊(cè)之后,向服務(wù)器發(fā)送消息;l服務(wù)器再把消息發(fā)送給所有監(jiān)聽些主題的客戶。聊天工具由服務(wù)器端和客戶端組成,要分析清楚兩方面所要完成的任務(wù),對(duì)設(shè)計(jì)來說,等于完成了一半。根據(jù)聊天的通信步驟,系統(tǒng)的功能模塊如圖3.2所示:即時(shí)消息系統(tǒng)服務(wù)器端客戶端后臺(tái)操作建立連接.監(jiān)聽客戶請(qǐng)求用戶登錄消息用戶管理好友管理聊天功能用戶登錄用戶注冊(cè)查找好友添加好友刪除好友發(fā)送消息接收消息聊天記錄數(shù)據(jù)庫操作發(fā)送系統(tǒng)消息消息管理圖3.2功能模塊1.服務(wù)器端服務(wù)器完成5大功能:建立連接、監(jiān)聽客戶請(qǐng)求、操作數(shù)據(jù)庫、查
34、看用戶登錄消息和發(fā)送系統(tǒng)消息這5大功能的具體含義如下:l建立連接:系統(tǒng)啟動(dòng)時(shí)建立一個(gè)ServerSocket連接,綁定本地計(jì)算機(jī)的一個(gè)端口,不斷偵聽是否有客戶端連接或者斷開連接。l監(jiān)聽客戶請(qǐng)求:服務(wù)器端是一個(gè)信息的樞紐,所有客戶端的信息都要傳到服務(wù)器端,再由服務(wù)器根據(jù)要求分發(fā)出去,客戶端在向服務(wù)器發(fā)送各種請(qǐng)求,如:上線、隱身、獲取我的好友、查找好友等等。l數(shù)據(jù)庫操作:當(dāng)客戶機(jī)向服務(wù)器發(fā)送請(qǐng)求時(shí),服務(wù)器需要通過數(shù)據(jù)庫管理軟件對(duì)數(shù)據(jù)庫的數(shù)據(jù)進(jìn)行增、刪和查詢。如錄入用戶信息、修改用戶信息、查找好友數(shù)據(jù)庫的資料以及添加好友數(shù)據(jù)到數(shù)據(jù)庫等。l用戶登錄消息:在服務(wù)器端的界面上,我們可以看到用戶的登錄消息,
35、包括IP地址、端口號(hào),登錄時(shí)間等。l發(fā)送系統(tǒng)消息:在客戶端管理界面上,可以輸入消息,并發(fā)送給所有的在線用戶。2.客戶端客戶端完成3大功能:用戶管理、好友管理和聊天功能,這些功能的含義如下:l用戶管理:此功能又包括2個(gè)子功能,用戶登錄和用戶注冊(cè)??蛻舳伺c服務(wù)器端建立通信通道,向服務(wù)器發(fā)送新建用戶的信息,接收來自服務(wù)器聽信息進(jìn)行注冊(cè)。注冊(cè)完畢后,可以通過系統(tǒng)的登錄界面,輸入賬號(hào)和密碼,然后發(fā)送到服務(wù)器進(jìn)行驗(yàn)證。如果驗(yàn)證通過,則打開程序的主界面。l好友管理:此功能又包括3個(gè)子功能,查找好友、添加好友和刪除好友。在程序的主界面,提供查找好友的功能。查找好友時(shí),客戶端向服務(wù)器發(fā)送查找好友請(qǐng)求,服務(wù)器端返
36、回在線用戶的信息,此時(shí)我們可以通過此來進(jìn)行添加好友,并跟好友通過通信連接。l聊天功能:客戶端在與好友端建立通信連接后,便可以與好友進(jìn)行聊天,聊天時(shí)發(fā)送的是文本信息,好友端在接收到聊天消息后,會(huì)提示收到消息,并由好友端自主打開消息接收界面。所有的聊天消息都會(huì)被保存起來,可以查看與每個(gè)好友的聊天記錄。聊天記錄包括內(nèi)容和時(shí)間。2.3系統(tǒng)詳細(xì)設(shè)計(jì)2.3.1多線程設(shè)計(jì)1.服務(wù)器端的多線程服務(wù)器需要和多個(gè)客戶端同時(shí)進(jìn)行通信,這就是服務(wù)器端的多線程。一旦服務(wù)器發(fā)現(xiàn)一個(gè)新的客戶端與之建立了連接,就馬上新建一個(gè)線程與客戶端進(jìn)行通信。用多線程的好處在于可以同時(shí)處理多個(gè)通信連接,不會(huì)出于由于數(shù)據(jù)排隊(duì)而發(fā)生的延遲或者
37、丟失,可以很好利用系統(tǒng)的性能。服務(wù)器為每個(gè)連接著的客戶建立一個(gè)線程,為了同時(shí)響應(yīng)多個(gè)客戶端,需設(shè)計(jì)一個(gè)主線程來啟動(dòng)服務(wù)器端的多線程。主線程與進(jìn)程結(jié)構(gòu)類似,它在獲得新連接時(shí)生成一個(gè)線程來處理這個(gè)這個(gè)連接。線程調(diào)度速度快,占用資源少,可共享進(jìn)程空間中的數(shù)據(jù),因此服務(wù)器的響應(yīng)速度較快,且I/O吞吐量較大。在程序的代碼里面,服務(wù)器端的多線程類定義為:Class ServerThread extends Thread/略;2.客戶端的多線程客戶端能夠完成信息的接收和發(fā)送操作,這與服務(wù)器的多線程概念不同,可以采用循環(huán)等待的方法來實(shí)現(xiàn)客戶端。利用循環(huán)等待的方式,客戶端首先接收用戶輸入的內(nèi)容并將它們發(fā)送到服務(wù)
38、器端,然后接收來自服務(wù)器端的信息,將其返回給客戶端的用戶。在程序的代碼里面,客戶端的多線程定義為:class MainWin extends JFrame implements Runnable/略;2.3.2數(shù)據(jù)庫設(shè)計(jì)數(shù)據(jù)庫表主要用來存放用戶的注冊(cè)信息和用戶的好友資料,可利用兩張數(shù)據(jù)表用來存放用戶信息和用戶好友資料。在SQL Server 2000上新建名為javaicq的數(shù)據(jù)庫,并建立兩張數(shù)據(jù)庫表:用戶的基本信息表(表名icq)和用戶好友數(shù)據(jù)庫表(表名friend).1.icq表icq表存放用戶信息,包括用戶的號(hào)碼(icqno)、昵稱(nickname)、密碼(password)、在線是否
39、(status)、IP地址(ip)、資料(info)、頭像號(hào)(pic)、性別(sex)、E-mail(email)和籍貫(place)等信息。利用SQL Server 2000建立數(shù)據(jù)表,如表3.1所示:表3.1用戶信息表字段數(shù)據(jù)類型說明icqnoint用戶的賬號(hào)nicknamechar用戶的昵稱passwordchar登錄密碼satusbit在線是否ipchar登錄的客戶端IP地址placechar籍貫picint用戶的頭像對(duì)應(yīng)的號(hào)碼sexchar性別emailchar電子郵件infochar用戶的個(gè)性說明2.frind表friend表的設(shè)計(jì)比較簡單,本系統(tǒng)設(shè)計(jì)了用戶的號(hào)碼和好友的號(hào)碼兩個(gè)字
40、段。利用SQL Server 2000建立如下數(shù)據(jù)表:表3.2好友信息表字段數(shù)據(jù)類型說明icqnochar用戶的賬號(hào)friendchar好友的賬號(hào)2.3.3服務(wù)器的設(shè)計(jì)1.主服務(wù)器類的設(shè)計(jì)主服務(wù)器實(shí)現(xiàn)了服務(wù)器的多線程,服務(wù)器端有一個(gè)進(jìn)程(或多個(gè)進(jìn)程)在指定的端口等待客戶的連接信息。一時(shí)連接成功,就可以按設(shè)計(jì)的數(shù)據(jù)交換方法和格式進(jìn)行數(shù)據(jù)傳輸。客戶端只在需要的時(shí)候向服務(wù)端發(fā)出連接請(qǐng)求。主服務(wù)器類調(diào)用ServerThread類,而每個(gè)ServerThread實(shí)體就是一個(gè)單獨(dú)的線程,即對(duì)應(yīng)于客戶端連接請(qǐng)求響應(yīng)的線程。它的執(zhí)行過程如下:l使用ServerSocket s=new ServerSocket
41、(8000)語句 綁定8000端口創(chuàng)建套接口l使用Socket=s.accept()來監(jiān)聽用戶的請(qǐng)求l使用new ServerThread(socket)語句創(chuàng)建新的線程。2.ServerThread類的設(shè)計(jì)客戶端發(fā)送連接請(qǐng)求的時(shí)候,服務(wù)器端創(chuàng)建一個(gè)ServerThread(socket)線程。ServerThread類的函數(shù)執(zhí)行過程可描述如下:l執(zhí)行ServerThreadz(Socket s)線程構(gòu)造函數(shù)l執(zhí)行socket=s取得傳遞參數(shù);lBufferedReader(new InputStreamReader(socket.getInputStream()創(chuàng)建輸入流;l使用PrintW
42、riter(new BufferedWriter( new OutputStreamWriter( socket.getOoutputStream)創(chuàng)建輸出流;l使用start()函數(shù)啟動(dòng)線程;l最后使用run()線程監(jiān)聽函數(shù)。3.登錄驗(yàn)證(1)登錄線程如果客戶端輸入的字符串“l(fā)ogin”,表示需要登錄,那么服務(wù)器在接收到該信息后連接數(shù)據(jù)庫,準(zhǔn)備從數(shù)據(jù)庫選擇昵稱和密碼。服務(wù)器接收到客戶端發(fā)送過來的號(hào)碼和密碼信息后,設(shè)定數(shù)據(jù)庫查尋條件,并執(zhí)行數(shù)據(jù)庫查尋,通過比較輸入的用戶名和密碼和數(shù)據(jù)庫信息來確定用戶的登錄是否成功,如果成功就,發(fā)送“ok”給客戶端,通知其進(jìn)入聊天主界面.反之發(fā)送“false”,
43、提示用戶登錄失敗,如圖3.3所示:客戶端服務(wù)器端Socket讀取數(shù)據(jù)庫,并驗(yàn)證賬號(hào)與密碼發(fā)送:“l(fā)ogin”接收:賬號(hào)和密碼接收:“l(fā)ogin”監(jiān)聽用戶請(qǐng)求發(fā)送:賬號(hào)和密碼ServeSocket接收:“ok”發(fā)送:“ok”打開程序主界面把IP地址和在線狀態(tài)錄入數(shù)據(jù)庫數(shù)據(jù)庫結(jié)束通知好友圖3.3登錄流程(2)通知好友通知好友也是在ServerThread類的run()函數(shù)里面,當(dāng)某一用戶成功登錄后,發(fā)送“getwhoaddme”到服務(wù)器端,服務(wù)器端查找數(shù)據(jù)庫中的“friend”數(shù)據(jù)表,并把用戶的所有好友消息及在線狀態(tài)發(fā)送回客戶端,客戶端通過這些好友的消息,向在線的好友發(fā)送上線通知。4.新建用戶用戶
44、新建過程也在線程監(jiān)聽函數(shù)run()中。當(dāng)服務(wù)器端收到客戶端發(fā)送的“new”請(qǐng)求時(shí),服務(wù)器端開始進(jìn)行新建用戶操作。新建用戶的過程是這樣的:首先要使用權(quán)Class.forName方法加載數(shù)據(jù)庫驅(qū)動(dòng)類,該類的描述是sun.jdbc.odbc.JdbcOdbcDriver;然后使用DriverManager.getConnection方法連接數(shù)據(jù),數(shù)據(jù)庫名為jdbc:odbc:javaicq;最后服務(wù)器接收客戶端用戶發(fā)送的昵稱、密碼、用戶E-mail,個(gè)人資料、籍貫和頭像等信息,執(zhí)行數(shù)據(jù)庫添加操作完成用戶的創(chuàng)建。服務(wù)器為新建的用戶指定唯一的注冊(cè)號(hào)碼,將以即時(shí)消息的方法發(fā)送給用戶。5.好友處理(1)查找
45、好友當(dāng)客戶端向服務(wù)器查找好友的請(qǐng)求后,服務(wù)器立即響應(yīng)并調(diào)Class.forName方法加載數(shù)據(jù)庫驅(qū)動(dòng)類sun.jdbc.odbc.JdbcOdbcDriver,然后調(diào)用方法DriverManager.getConnection完成數(shù)據(jù)庫的連接,得到用戶好友查詢的結(jié)果。查詢結(jié)果包括:好友的昵稱、性別、性別、籍貫、個(gè)人資料等信息。服務(wù)器對(duì)數(shù)據(jù)庫聽查詢結(jié)果進(jìn)行篩選,只向客戶端的用戶返回好友的注冊(cè)號(hào)碼、頭像信息號(hào)以及是否在線信息??蛻舳私邮盏讲樵兘Y(jié)果后,利用相應(yīng)的函數(shù)將其顯示出來。(2)添加好友讀取資料功能是在查找好友功能基礎(chǔ)上建立的。用戶得到好友列表后,可根據(jù)需要讀取好友的詳細(xì)資料,也可讀取用戶自己
46、的詳細(xì)資料。服務(wù)器使用Vector矢量保存客戶端用戶的好友號(hào)碼,并返回好友的昵稱、號(hào)碼、IP地址、狀態(tài)、頭像和個(gè)人資料等信息。(3)添加好友服務(wù)器響應(yīng)客戶端用戶的請(qǐng)求后,首先連接數(shù)據(jù)庫,并根據(jù)接收的用戶號(hào)碼及好友號(hào)碼向好友表添加記錄。服務(wù)器使用r6保存查詢結(jié)果。若r6為1,則表明添加好友成功,服務(wù)器將給客戶端發(fā)出“ok addfriend”的消息;否則添加好友失敗,服務(wù)器將給客戶端發(fā)出“falseaddfriend”的消息。(4)添加好友應(yīng)答如果服務(wù)器收到其它用戶添加我為好友的請(qǐng)求后,連接數(shù)據(jù)庫,根據(jù)接收用戶號(hào)碼及好友號(hào)碼向好友表添加記錄。若添加成功,則向用戶傳遞好友的基本信息,比如昵稱。服務(wù)
47、器利用r5保存處理結(jié)果,并向客戶端輸出結(jié)果。(5)刪除好友當(dāng)服務(wù)器接受到客戶端刪除好友請(qǐng)求后,它連接數(shù)據(jù)庫,并根據(jù)接收的用戶號(hào)碼及好友號(hào)碼表記錄刪除。服務(wù)器利用r7保存刪除結(jié)果,若r7為1,則刪除成功,服務(wù)器給客戶端發(fā)出“ok delfriend”的消息;否則刪除好友失敗,服務(wù)器給客戶端發(fā)出“false delfriend”的消息。接收好友處理請(qǐng)求addnewfrienddelfriendAddfriendfriendfind查找好友讀取好友資料添加好友添加好友應(yīng)答刪除好友YesNoYesYesYesYesNoNoNo返回圖3.4處理好友請(qǐng)求6.退出下線用戶在線時(shí),數(shù)據(jù)庫表的IP地址字段為此時(shí)
48、用戶計(jì)算機(jī)的真實(shí)IP地址;狀態(tài)字段為1。若用戶退出下線,客戶端向服務(wù)器端發(fā)送“l(fā)ogout”,服務(wù)器接收到下線請(qǐng)求時(shí),需完成修改IP字段和狀態(tài)字段。服務(wù)器首先利用Class.forName方法加載數(shù)據(jù)庫驅(qū)動(dòng)類sun.jdbc.odbc.JdbcOdbcDriver;然后通過方法DriverManager.getConnection連接數(shù)據(jù)庫存;最后根據(jù)用戶號(hào)碼,將其狀態(tài)字段設(shè)為0,IP地址字段設(shè)為空。2.3.4客戶端的設(shè)計(jì)客戶通過Socket與服務(wù)器建立連接。服務(wù)器與客戶都通過構(gòu)造BufferedReader、PrintWriter來建立輸入/輸出流,雙方通過該輸入/輸出流來相互傳遞信息。一旦
49、收到客戶方的連接請(qǐng)求,服務(wù)器利用accept()函數(shù)返回一個(gè)新建的Socket對(duì)象,隨后客戶端向服務(wù)器發(fā)送消息,諸如注冊(cè)、登錄和查找好友等請(qǐng)求,服務(wù)器收到請(qǐng)求后,針對(duì)不同的消息處理請(qǐng)求。在這一過程中,服務(wù)器端與客戶端采用UDP協(xié)議通信。雖然UDP協(xié)議不可靠,但對(duì)于聊天工具而言,其可靠性并不太重要。1.用戶注冊(cè)當(dāng)服務(wù)器收到用戶的注冊(cè)請(qǐng)求后,開始接收客戶傳遞的消息,諸如客戶的昵稱、性別、籍貫、頭像和個(gè)人資料等信息。接收完畢后,服務(wù)器便通過JdbcOdbc與后臺(tái)數(shù)據(jù)庫連接,向數(shù)據(jù)庫添加記錄。若新用戶注冊(cè),則向客戶返回號(hào)碼,并在數(shù)據(jù)庫中注冊(cè)用戶的IP地址,設(shè)定Status值告知用戶在線??蛻羰盏椒?wù)器
50、返回的消息后,打開主程序窗口,同時(shí)創(chuàng)建UDP以便在用戶之間建立聯(lián)系。注冊(cè)通信過程如圖3.5所示:Socket接收完畢發(fā)送:“new”發(fā)送完畢接收:注冊(cè)信息接收:“new”監(jiān)聽用戶請(qǐng)求發(fā)送:注冊(cè)信息ServeSocket接收:賬號(hào)輸出:賬號(hào)打開登錄界面結(jié)束數(shù)據(jù)庫操作客戶端正服務(wù)器端圖3.5注冊(cè)流程2.用戶登錄用戶在客戶端程序中輸入用戶號(hào)碼與密碼,與服務(wù)器建立連接,向服務(wù)器發(fā)送登錄請(qǐng)求。服務(wù)器收到該請(qǐng)求后,通過JdbcOdbc讀取數(shù)據(jù)庫,與用戶輸入的消息做比較:若用戶輸入的信息與數(shù)據(jù)庫信息相同,則服務(wù)器向客戶返回成功消息,將其Status字段設(shè)為1,并注冊(cè)用戶當(dāng)前的IP地址;否則服務(wù)器向客戶返回失
51、敗消息。客戶端收到服務(wù)器的成功確認(rèn)后,打開聊天主窗口;否則彈出失敗信息。客戶端事件驅(qū)動(dòng)與服務(wù)器端的事件監(jiān)聽相對(duì)應(yīng)。3.服務(wù)器連接服務(wù)器連接是在ConnectServer()函數(shù)中實(shí)現(xiàn)的。本函數(shù)用到了具有連接性、有序性特點(diǎn)的流,根據(jù)服務(wù)器的IP地址和端口來完成客戶端與服務(wù)器的連接。IP地址是網(wǎng)絡(luò)中唯一地址的標(biāo)識(shí)。服務(wù)器連接過程分服務(wù)器端與客戶端兩部分,執(zhí)行流程如下:(1)服務(wù)器程序流程l程序初始化;l填寫本機(jī)地址信息;l綁定并監(jiān)聽一個(gè)固定的端口;l收到Client的連接后建立一個(gè)Socket連接;l產(chǎn)生一個(gè)新的進(jìn)程與Client進(jìn)行通信和信息處理;l子通信結(jié)束后中斷與Client的連接。(2)客
52、戶端程序流程:l程序初始化;l填寫服務(wù)器地址消息;l連接服務(wù)器;l與服務(wù)器通信和信息處理;l通信結(jié)束后斷開連接。4.主程序設(shè)計(jì)用戶完成登錄后, 客戶端與服務(wù)器端建立連接。連接建立成功后,客戶向服務(wù)器請(qǐng)求讀取好友名單;服務(wù)器收到該請(qǐng)求,開始讀取數(shù)據(jù)庫中的friend表并得到好友的號(hào)碼,再通過jcq表讀取好友資料,向客戶端發(fā)送這些信息;客戶收到服務(wù)器消息后,在主窗口顯示好友。客戶端還建立矢量來存儲(chǔ)好友的昵稱、號(hào)碼,頭像編號(hào)和IP地址等信息。5好友管理(1)查找好友好友查找可利用FindFriend2類完成,F(xiàn)indFriend2類繼承自JFrame類。FindFriend2中定義的界面控件包括:好
53、友的昵稱、性別、住址、Jicq號(hào)碼、IP地址、在線狀態(tài)、頭像、電子郵件和個(gè)人留言等信息。查找好友所需的網(wǎng)絡(luò)變量定義如下:Socket socket:連接socketBufferedReader in;讀入緩沖區(qū)PrintWriter out;輸入緩沖區(qū)int myid;用戶的號(hào)碼String serverhost:發(fā)送端的主機(jī)地址int servport:服務(wù)端的主機(jī)地址DatagramPacket sendPacket:存儲(chǔ)發(fā)送信息的發(fā)送數(shù)據(jù)報(bào)DatagramSocket sendSocket:存儲(chǔ)接收信息的接收數(shù)據(jù)報(bào)int sendPort:發(fā)送的端口號(hào)(2)添加好友用戶添加好友是聊天工具
54、的基本功能之一。添加好友的基本步驟如下:用戶A登錄后,向服務(wù)器發(fā)送查找請(qǐng)求,服務(wù)器響應(yīng)并讀取數(shù)據(jù)庫表icq,將結(jié)果返回給用戶;用戶在收到查詢結(jié)果后選擇用戶B,向服務(wù)器發(fā)送添加好友請(qǐng)求,服務(wù)器收到請(qǐng)求響應(yīng),更新數(shù)據(jù)表frriend,并從icq表中讀取好友基本信息,將信息返回給用戶A;用戶A的客戶端主窗口顯示用戶B,并通過UDP通知用戶B;用戶B收到服務(wù)器的確認(rèn)消息,可決定是否添加用戶A為好友。(3)刪除好友用戶可以刪除好友列表中指定的好友,客戶端確認(rèn)用戶操作后向服務(wù)器發(fā)送刪除請(qǐng)求,服務(wù)器收到該請(qǐng)求,連接數(shù)據(jù)庫表friend并刪除用戶及該好友的記錄。若刪除成功,則向客戶端返回成功消息,通知用戶。2.3.5消息通信的設(shè)計(jì)消息的發(fā)送主要是通過數(shù)據(jù)報(bào)服務(wù)來實(shí)現(xiàn)的。JAVA實(shí)現(xiàn)數(shù)據(jù)報(bào)通信的過程除面向連接的
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度綠色建筑鋼筋綁扎與回收利用合同4篇
- 江蘇省無錫市錫山區(qū)2019-2020學(xué)年八年級(jí)下學(xué)期期中物理試題【含答案、解析】
- 2025版房屋抵押貸款風(fēng)險(xiǎn)評(píng)估與咨詢服務(wù)合同4篇
- 股權(quán)代持合同簽訂與解除的法律要點(diǎn)2025年合同2篇
- 江西省贛州市瑞金市2024-2025學(xué)年八年級(jí)上學(xué)期期末考試道德與法治試題(含答案)
- 廣東省茂名市電白區(qū)2024-2025學(xué)年八年級(jí)上學(xué)期期末地理試卷(含答案)
- 固體飲料行業(yè)的融資模式與投資機(jī)會(huì)分析報(bào)告考核試卷
- 2025版企業(yè)知識(shí)產(chǎn)權(quán)保護(hù)委托合同范本指南3篇
- 東南歐eMAG知識(shí)百科 2025
- 2001年江蘇南通中考滿分作文《我發(fā)現(xiàn)女孩也可做“太陽”》
- 《健康體檢知識(shí)》課件
- 部編版語文五年級(jí)下冊(cè) 第一單元 專項(xiàng)訓(xùn)練課外閱讀(含答案)
- 蘇少版七年級(jí)美術(shù)下冊(cè) 全冊(cè)
- 名表買賣合同協(xié)議書
- JTG-T-F20-2015公路路面基層施工技術(shù)細(xì)則
- 2024年遼寧石化職業(yè)技術(shù)學(xué)院單招職業(yè)適應(yīng)性測試題庫附答案
- 中西方校服文化差異研究
- 《子宮肉瘤》課件
- 《準(zhǔn)媽媽衣食住行》課件
- 給男友的道歉信10000字(十二篇)
- 客人在酒店受傷免責(zé)承諾書范本
評(píng)論
0/150
提交評(píng)論