




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、系統(tǒng)需求分析標(biāo)準(zhǔn)模板1.1技術(shù)背景1.1.1 C/S 模型在網(wǎng)絡(luò)連接模式中,除對等網(wǎng)外,還有另一種形式的網(wǎng)絡(luò),即 客戶機(jī)/服務(wù)器網(wǎng)3, Client/server。在客戶機(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ù)器都是指通信中所涉及的兩個應(yīng)用進(jìn)程(軟件)。使用計(jì)算機(jī)的人是計(jì)算機(jī)的?用戶?(user)而不是?客戶? (client)。但在許多國外文獻(xiàn)中,也經(jīng)常把運(yùn)行客戶程 序的機(jī)器稱為client(這種情況下也可把 client譯質(zhì)客戶機(jī)?), 把運(yùn)行服務(wù)器程序的機(jī)器稱為server。
2、所以有時要根據(jù)上下文判斷client與server是指軟件還是硬件。它是軟件系統(tǒng)體系結(jié)構(gòu),通過它可以充分利用兩端硬件環(huán)境的優(yōu)勢,將任務(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ā)展方向。1.2.2 TCP/IP 協(xié)議1. I
3、P網(wǎng)際協(xié)議IP是TCP/IP的心臟,也是網(wǎng)絡(luò)層中最重要的協(xié)議4。IP層接收由更低層(網(wǎng)絡(luò)接口層例如以太網(wǎng)設(shè)備驅(qū)動 程序)發(fā)來的數(shù)據(jù)包,并把該數(shù)據(jù)包發(fā)送到更高層-TCP或UDP層;相反,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è)包中 的源地址是有效的。也可以這樣說,IP地址形成了許多服務(wù)的認(rèn)證基礎(chǔ),這些服務(wù)相信數(shù)據(jù)包是從一個有效的主機(jī)發(fā)送來的。 IP確認(rèn)包含一個選
4、項(xiàng),叫作 IP source routing ,可以用來指定 一條源地址和目的地址之間的直接路徑。對于一些TCP和UDP的服務(wù)來說,使用了該選項(xiàng)的IP包好像是從路徑上的最后一 個系統(tǒng)傳遞過來的,而不是來自于它的真實(shí)地點(diǎn)。這個選項(xiàng)是 為了測試而存在的,說明了它可以被用來欺騙系統(tǒng)來進(jìn)行平常 是被禁止的連接。那么,許多依靠IP源地址做確認(rèn)的服務(wù)將產(chǎn) 生問題并且會被非法入侵。2. TCP如果IP數(shù)據(jù)包中有已經(jīng)封好的 TCP數(shù)據(jù)包5,那么IP將 把它們向上傳送到TCP層。TCP將包排序并進(jìn)行錯誤檢查, 同時實(shí)現(xiàn)虛電路間的連接。TCP數(shù)據(jù)包中包括序號和確認(rèn),所以未按照順序收到的包可以被排序,而損壞的包可以
5、被重傳。TCP將它的信息送到更高層的應(yīng)用程序,例如 Telnet的服 務(wù)程序和客戶程序。應(yīng)用程序輪流將信息送回TCP層,TCP層便將它們向下傳送到IP層,設(shè)備驅(qū)動程序和物理介質(zhì), 最后 到接收方。面向連接的服務(wù)(例如 Telnet、FTP、rlogin、X Windows 和SMTP)需要高度的可靠性,所以它們使用了 TCP。DNS在 某些情況下使用 TCP (發(fā)送和接收域名數(shù)據(jù)庫),但使用UDP 傳送有關(guān)單個主機(jī)的信息。3. UDPUDP與TCP位于同一層,但它不管數(shù)據(jù)包的順序、錯誤 或重發(fā)。因此,UDP不被應(yīng)用于那些使用虛電路的面向連接的 服務(wù),UDP主要用于那些面向查詢-應(yīng)答的服務(wù),例如
6、 NFS。 相對于FTP或Telnet,這些服務(wù)需要交換的信息H較小。使用 UDP的服務(wù)包括NTP (網(wǎng)絡(luò)時間協(xié)議)和 DNS (DNS也使用 TCP)。欺騙UDP包比欺騙TCP包更容易,因?yàn)?UDP沒有建 立初始化連接(也可以稱為握手)(因?yàn)樵趦蓚€系統(tǒng)間沒有虛電 路),也就是說,與 UDP相關(guān)的服務(wù)面臨著更大的危險。4. TCP與UDP的端口結(jié)構(gòu)TCP和UDP服務(wù)通常有一個客戶/服務(wù)器的關(guān)系,例如, 一個Telnet服務(wù)進(jìn)程開始在系統(tǒng)上處于空閑狀態(tài),等待著連接。 用戶使用Telnet客戶程序與服務(wù)進(jìn)程建立一個連接??蛻舫绦?向服務(wù)進(jìn)程寫入信息,服務(wù)進(jìn)程讀出信息并發(fā)出響應(yīng),客戶程 序讀出響應(yīng)并
7、向用戶報告。因而,這個連接是雙工的,可以用 來進(jìn)行讀寫。兩個系統(tǒng)間的多重 Telnet連接是如何相互確認(rèn)并協(xié)調(diào)一致 呢? TCP或UDP連接唯一地使用每個信息中的如下四項(xiàng)進(jìn)行 確認(rèn):源IP地址:發(fā)送包的IP地址;目的IP地址:接收包的IP地址; 源端口 :源系統(tǒng)上的連接的端口 ; 目的端口 :目的系統(tǒng)上的連接的端口。端口是一個軟件結(jié)構(gòu),被客戶程序或服務(wù)進(jìn)程用來發(fā)送和 接收信息。一個端口對應(yīng)一個16比特的數(shù)。服務(wù)進(jìn)程通常使用 一個固定的端口, 例如,SMTP使用25、Xwindows使用6000。 這些端口號是廣為人知的,因?yàn)樵诮⑴c特定的主機(jī)或服 務(wù)的連接時,需要這些地址和目的地址進(jìn)行通訊 1
8、.2.3編程技術(shù)1.JAVA語言Java6是由Sun Microsystems公司于1995年5月推出的Java程序設(shè)計(jì)語言(以下簡稱Java語言)和Java平臺的總稱。用Java實(shí)現(xiàn)的HotJava瀏覽器(支持 Java applet)顯示了 Java 的魅力:跨平臺、動態(tài)的 Web、Internet計(jì)算。從此,Java被廣 泛接受并推動了 Web的迅速發(fā)展,常用的瀏覽器現(xiàn)在均支持Java appleto另一方面, Java技術(shù)也不斷更新。Java語言的優(yōu)良特性使得 Java應(yīng)用具有無比的健壯性和 可靠性,這也減少了應(yīng)用系統(tǒng)的維護(hù)費(fèi)用。Java對對象技術(shù)的全面支持和Java平臺內(nèi)嵌的API7
9、能縮短應(yīng)用系統(tǒng)的開發(fā)時間 并降低成本。Java的編譯一次,到處可運(yùn)行的特性使得它能夠 提供一個隨處可用的開放結(jié)構(gòu)和在多平臺之間傳遞信息的低成 本方式。特另U是Java企業(yè)應(yīng)用編程接口 (Java Enterprise APIs) 為企業(yè)計(jì)算及電子商務(wù)應(yīng)用系統(tǒng)提供了有關(guān)技術(shù)和豐富的類庫。2. WinsockWindows下網(wǎng)絡(luò)編程的規(guī)范一 Windows Sockets是 Windo ws下得到廣泛應(yīng)用的、開放的、支持多種協(xié)議的網(wǎng)絡(luò)編程接口。通信的基礎(chǔ)是套接口( Socket), 一個套接口是通訊的一端。 在這一端上你可以找到與其對應(yīng)的一個名字。一個正在被使用 的套接口都有它的類型和與其相關(guān)的進(jìn)
10、程。套接口存在于通訊 域中。通訊域是為了處理一般的線程通過套接口通訊而引進(jìn)的 一種抽象概念。在一次網(wǎng)絡(luò)通信/連接中有以下幾個參數(shù)需要被設(shè)谿:本地IP地址-本地端口號-對方端口號-對方IP地址。左邊兩 部分稱為一個半關(guān)聯(lián),當(dāng)與右邊兩部分建立連接后就稱為一個 全關(guān)聯(lián)。在這個全關(guān)聯(lián)的套接口上可以雙向的交換數(shù)據(jù)。如果 是使用無連接的通信則只需要建立一個半關(guān)聯(lián),在發(fā)送和接收 時指明另一半的參數(shù)就可以了,所以可以說無連接的通信是將 數(shù)據(jù)發(fā)送到另一臺主機(jī)的指定端口。此外不論是有連接還是無 連接的通信都不需要雙方的端口號相同。Socket接口是訪問Internet使用得最廣泛的方法。3. 多線程編程多線程切是
11、為了使得多個線程并行的工作以完成多項(xiàng)任務(wù), 以提高系統(tǒng)的效率。線程是在同一時間需要完成多項(xiàng)任務(wù)的時 候被實(shí)現(xiàn)的。使用線程的好處有以下幾點(diǎn):使用線程可以把占據(jù)長時間的程序中的任務(wù)放到后臺去處理用戶界面可以更加吸引人,這樣比如用戶點(diǎn)擊了一個按 鈕去觸發(fā)某些事件的處理,可以彈出一個進(jìn)度條來顯示處理的 進(jìn)度程序的運(yùn)行速度可能加快在一些等待的任務(wù)實(shí)現(xiàn)上如用戶輸入、文件讀寫和網(wǎng)絡(luò) 收發(fā)數(shù)據(jù)等,線程就比較有用了。在這種情況下我們可以釋放 一些珍貴的資源如 內(nèi)存占用等等。多線程在JAVA里面的應(yīng)用也是很廣泛。Java對多線程 的支持是非常強(qiáng)大的,他屏蔽掉了許多的技術(shù)細(xì)節(jié),讓我們可 以輕松的開發(fā)多線程的應(yīng)用程序
12、。1.2.4開發(fā)平臺1. J2SE平臺Java2平臺包括:標(biāo)準(zhǔn)版(J2SE)、企業(yè)版(J2EE)和微縮 版(J2ME)三個版本。J2SE,J2ME和J2EE,這也就是SunONE(O pen NetEnvironment)體系。J2SE就是Java2的標(biāo)準(zhǔn)版,主要用 于桌面應(yīng)用軟件的編程;J2ME主要應(yīng)用于嵌入是系統(tǒng)開發(fā),如手機(jī)和PDA的編程;J2EE是Java2的企業(yè)版,主要用于分 布式的網(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ò)編程定位在客戶端,主要用于桌面
13、應(yīng)用軟件的編程。J2SE包含那些構(gòu)成Java語言核心的類。比如:數(shù)據(jù)庫連接、接口定義、輸入/輸出、網(wǎng)絡(luò)編程2. MYSQL數(shù)據(jù)庫MYSQL 9的特性 MYSQL 的特性包括:Internet集成。SQL Server 2000數(shù)據(jù)庫引擎提供完整的XML支持。它還具有構(gòu)成最大的Web站點(diǎn)的數(shù)據(jù)存儲組件所需的可伸縮性、可用性和安全功能。MYSQL程序設(shè)計(jì)模型與 Windows DNA構(gòu)架集成,用以開發(fā) Web應(yīng)用程序,并且 MYSQL 支持 English Query和 Microsoft搜索服務(wù)等功能, 在 Web應(yīng)用程序中包含了用戶友好的查詢和強(qiáng)大的搜索功能??缮炜s性和可用性。同一個數(shù)據(jù)庫引擎
14、可以在不同的平臺上使用,從運(yùn)行 Microsoft Windows? 98的便攜式電腦,到運(yùn) 行MYSQL數(shù)據(jù)中心版的大型多處理器服務(wù)器。MYSQL企業(yè)版支持聯(lián)合服務(wù)器、索引視圖和大型內(nèi)存支持等功能,使其得 以升級到最大 Web站點(diǎn)所需的性能級別。企業(yè)級數(shù)據(jù)庫功能。MYSQL關(guān)系數(shù)據(jù)庫引擎支持當(dāng)今苛刻的數(shù)據(jù)處理環(huán)境所需的功能。數(shù)據(jù)庫引擎充分保護(hù)數(shù)據(jù)完整 性,同時將管理上千個并發(fā)修改數(shù)據(jù)庫的用戶的開銷減到最小。 MYSQL分布式查詢使您得以引用來自不同數(shù)據(jù)源的數(shù)據(jù),就 好象這些數(shù)據(jù)是 MYSQL數(shù)據(jù)庫的一部分,同時分布式事務(wù)支 持充分保護(hù)任何分布式數(shù)據(jù)更新的完整性。復(fù)制同樣使您得以 維護(hù)多個數(shù)據(jù)
15、復(fù)本,同時確保單獨(dú)的數(shù)據(jù)復(fù)本保持同步??蓪?一組數(shù)據(jù)復(fù)制到多個移動的脫接用戶,使這些用戶自主地工作,然后將他們所做的修改合并回發(fā)布服務(wù)器。易于安裝、部署和使用。 MYSQL中包括一系列管理和開 發(fā)工具,這些工具可改進(jìn)在多個站點(diǎn)上安裝、部署、管理和使 用SQL Server的過程。MYSQL還支持基于標(biāo)準(zhǔn)的、與 Win dows DNA集成的程序設(shè)計(jì)模型,使 MYSQL數(shù)據(jù)庫和數(shù)據(jù) 倉庫的使用成為生成強(qiáng)大的可伸縮系統(tǒng)的無縫部分。這些功能 使您得以快速交付 MYSQL應(yīng)用程序,使客戶只需最少的安裝 和管理開銷即可實(shí)現(xiàn)這些應(yīng)用程序。系統(tǒng)分析與設(shè)計(jì)2.1需求分析此次開發(fā)的網(wǎng)絡(luò)聊天工具可作為個人的交流工
16、具使用, 通信的安全性不是很高,但要求信息的響應(yīng)速度要較快,讓 用戶充分享受到網(wǎng)絡(luò)即時消息的方便和快捷。本聊天工具由 服務(wù)器端程序和客戶端程序兩部分組成,整體采用JAVA平臺開發(fā),并使用 MYSQL管理數(shù)據(jù)庫數(shù)據(jù)。服務(wù)器是可以監(jiān) 聽和查看用戶的基本操作;客戶端程序面向?qū)嶋H用戶,它有 必要的界面的按鈕,向用戶提供網(wǎng)絡(luò)即時消息的功能:本聊天需包含如下基本功能:1. 客戶端:(1) 新用戶注冊;(2) 用戶登錄驗(yàn)證;(3) 獲取好友列表并顯示好友狀態(tài)(在線/不在線);(4) 添加用戶好友;(5) 刪除用戶好友;(6) 用戶與好友聊天(可查看聊天記錄);(7) 接收系統(tǒng)信息。2. 服務(wù)端:(1) 啟動
17、和關(guān)閉后臺服務(wù)器;(2) 查看客戶端登錄的相關(guān)信息(客戶端登陸時間/登陸I P);(3) 向所有在線用戶發(fā)送系統(tǒng)消息。2.2系統(tǒng)總體框架2.2.1總體設(shè)計(jì)網(wǎng)絡(luò)即時通訊系統(tǒng)采用客戶機(jī)/服務(wù)器(C/S)的模式來設(shè)計(jì),是一個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.1 C/S體系結(jié)構(gòu)放據(jù)姓理邏輯客戶事務(wù)處理1. 客戶層客戶層也叫應(yīng)用層,是應(yīng)用程序的用戶接口部分。給聊 天工具設(shè)計(jì)一個客戶層具有很多優(yōu)點(diǎn),這是因?yàn)榭蛻魧訐?dān)負(fù) 著用戶與應(yīng)用間的對話功能。它用于檢查用戶的
18、輸入數(shù)據(jù), 顯示應(yīng)用的輸出數(shù)據(jù)。為了使用戶能直觀地進(jìn)行操作,客戶 層需要合作圖形用戶接口。若聊天用戶變更,系統(tǒng)只需要改 寫顯示控制和數(shù)據(jù)檢查程序即可,而不影響其他兩層。數(shù)據(jù) 檢查的內(nèi)容限于數(shù)據(jù)的形式和值的范圍,不包括有關(guān)業(yè)務(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)化
19、整體設(shè)計(jì)的目的。3. 數(shù)據(jù)層據(jù)層就是 DBMS ,本系統(tǒng)使用了 Microsoft公司的SQL Server 2000數(shù)據(jù)庫服務(wù)器來管理數(shù)據(jù)。MYSQL能迅速執(zhí)行 大雖數(shù)據(jù)的更新和檢索。因此,從功能層傳送到數(shù)據(jù)層的?要 求?一般都使用 SQL語言。2.2.2功能模塊聊天工具按如下過程完成通信:客戶向服務(wù)器注冊,告知服務(wù)器它在監(jiān)聽某主題;客戶注冊之后,向服務(wù)器發(fā)送消息;服務(wù)器再把消息發(fā)送給所有監(jiān)聽些主題的客戶。聊天工具由服務(wù)器端和客戶端組成,要分析清楚兩方面 所要完成的任務(wù),對設(shè)計(jì)來說,等于完成了一半。根據(jù)聊天 的通信步驟,系統(tǒng)的功能模塊如圖 3.2所示:即時消息系統(tǒng)服務(wù)器端客戶端后臺操作建立連
20、接.監(jiān)聽客戶請求用戶登錄消息用戶管理好友管理聊天功能用戶登錄用戶注冊查找好友添加好友刪除好友發(fā)送消息接收消息聊天記錄數(shù)據(jù)庫操作發(fā)送系統(tǒng)消息消息管理圖3.2功能模塊1. 服務(wù)器端服務(wù)器完成5大功能:建立連接、監(jiān)聽客戶請求、操作 數(shù)據(jù)庫、查看用戶登錄消息和發(fā)送系統(tǒng)消息這5大功能的具體含義如下:建立連接:系統(tǒng)啟動時建立一個ServerSocket連接,綁定本地計(jì)算機(jī)的一個端口,不斷偵聽是否有客戶端 連接或者斷開連接。監(jiān)聽客戶請求:服務(wù)器端是一個信息的樞紐,所有客戶端的信息都要傳到服務(wù)器端,再由服務(wù)器根據(jù)要求 分發(fā)出去,客戶端在向服務(wù)器發(fā)送各種請求,如:上 線、隱身、獲取我的好友、查找好友等等。數(shù)據(jù)庫
21、操作:當(dāng)客戶機(jī)向服務(wù)器發(fā)送請求時,服務(wù)器需要通過數(shù)據(jù)庫管理軟件對數(shù)據(jù)庫的數(shù)據(jù)進(jìn)行增、刪 和查詢。如錄入用戶信息、修改用戶信息、查找好友 數(shù)據(jù)庫的資料以及添加好友數(shù)據(jù)到數(shù)據(jù)庫等。用戶登錄消息:在服務(wù)器端的界面上, 我們可以看到 用戶的登錄消息,包括IP地址、端口號,登錄時間等。發(fā)送系統(tǒng)消息:在客戶端管理界面上,可以輸入消息, 并發(fā)送給所有的在線用戶。2. 客戶端客戶端完成3大功能:用戶管理、好友管理和聊天功能,這些功能的含義如下:用戶管理:此功能乂包括2個子功能,用戶登錄和用 戶注冊??蛻舳伺c服務(wù)器端建立通信通道,向服務(wù)器 發(fā)送新建用戶的信息,接收來自服務(wù)器聽信息進(jìn)行注 冊。注冊完畢后,可以通過
22、系統(tǒng)的登錄界面,輸入賬 號和密碼,然后發(fā)送到服務(wù)器進(jìn)行驗(yàn)證。如果驗(yàn)證通 過,則打開程序的主界面。好友管理:此功能乂包括 3個子功能,查找好友、添 加好友和刪除好友。在程序的主界面,提供查找好友 的功能。查找好友時,客戶端向服務(wù)器發(fā)送查找好友 請求,服務(wù)器端返回在線用戶的信息,此時我們可以通 過此來進(jìn)行添加好友,并跟好友通過通信連接。聊天功能:客戶端在與好友端建立通信連接后,便可以與好友進(jìn)行聊天,聊天時發(fā)送的是文本信息,好友 端在接收到聊天消息后,會提示收到消息,并由好友 端自主打開消息接收界面。所有的聊天消息都會被保 存起來,可以查看與每個好友的聊天記錄。聊天記錄 包括內(nèi)容和時間。2.3系統(tǒng)詳
23、細(xì)設(shè)計(jì)2.3.1多線程設(shè)計(jì)1. 服務(wù)器端的多線程服務(wù)器需要和多個客戶端同時進(jìn)行通信,這就是服務(wù)器 端的多線程。一旦服務(wù)器發(fā)現(xiàn)一個新的客戶端與之建立了連 接,就馬上新建一個線程與客戶端進(jìn)行通信。用多線程的好 處在于可以同時處理多個通信連接,不會出于由于數(shù)據(jù)排隊(duì) 而發(fā)生的延遲或者丟失,可以很好利用系統(tǒng)的性能。服務(wù)器為每個連接著的客戶建立一個線程,為了同時響 應(yīng)多個客戶端,需設(shè)計(jì)一個主線程來啟動服務(wù)器端的多線程。 主線程與進(jìn)程結(jié)構(gòu)類似,它在獲得新連接時生成一個線程來 處理這個這個連接。線程調(diào)度速度快,占用資源少,可共享 進(jìn)程空間中的數(shù)據(jù),因此服務(wù)器的響應(yīng)速度較快,且I/O吞吐雖較大。在程序的代碼里面
24、,服務(wù)器端的多線程類定義為:Class ServerThread extends Thread(/ 略;2. 客戶端的多線程客戶端能夠完成信息的接收和發(fā)送操作,這與服務(wù)器的 多線程概念不同,可以采用循環(huán)等待的方法來實(shí)現(xiàn)客戶端。利用循環(huán)等待的方式,客戶端首先接收用戶輸入的內(nèi)容并將 它們發(fā)送到服務(wù)器端,然后接收來自服務(wù)器端的信息,將其 返回給客戶端的用戶。在程序的代碼里面,客戶端的多線程 定義為:class MainWin extends JFrame implements Runnable/略;2.3.2數(shù)據(jù)庫設(shè)計(jì)數(shù)據(jù)庫表主要用來存放用戶的注冊信息和用戶的好友 資料,可利用兩張數(shù)據(jù)表用來存放用戶
25、信息和用戶好友資料。 在MYSQL上新建名為javaicq的數(shù)據(jù)庫,并建立兩張數(shù)據(jù) 庫表:用戶的基本信息表(表名 icq)和用戶好友數(shù)據(jù)庫表(表名 friend).I.icq 表icq表存放用戶信息,信息。利用 MYSQL 2000建立數(shù)X,如表3.1所小:表3.1 用戶信息表字段數(shù)據(jù) 類型說明Ipint用戶IpIdchar用戶的賬號namechar用戶的昵稱Ipbit用戶ip2.frind 表friend表的設(shè)計(jì)比較簡單,本系統(tǒng)設(shè)計(jì)了用戶的號碼和 好友的號碼兩個亍段。利用 SQL Server 2000建立如下數(shù)據(jù) 表:表3.2好友信息表字段數(shù)據(jù) 類型說明ipchar用戶Ipidchar好友
26、的賬號2.3.3服務(wù)器的設(shè)計(jì)1.主服務(wù)器類的設(shè)計(jì)主服務(wù)器實(shí)現(xiàn)了服務(wù)器的多線程,服務(wù)器端有一個進(jìn)程(或多個進(jìn)程)在指定的端口等待客戶的連接信息。一時連 接成功,就可以按設(shè)計(jì)的數(shù)據(jù)交換方法和格式進(jìn)行數(shù)據(jù)傳輸。 客戶端只在需要的時候向服務(wù)端發(fā)出連接請求。主服務(wù)器類 調(diào)用ServerThread類,而每個 ServerThread實(shí)體就是一個單 獨(dú)的線程,即對應(yīng)于客戶端連接請求響應(yīng)的線程。它的執(zhí)行 過程如下:使用 ServerSocket s=new ServerSocket(8000)語句綁 定8000端口創(chuàng)建套接口使用Socket=s.accept()來監(jiān)聽用戶的請求使用new ServerThr
27、ead(socket)語句創(chuàng)建新的線程。2.ServerThread 類的設(shè)計(jì)客戶端發(fā)送連接請求的時候,服務(wù)器端創(chuàng)建一個ServerThread(socket)線程。ServerThread類的函數(shù)執(zhí)行過程可描述 如下:執(zhí)行ServerThreadz(Socket s)線程構(gòu)造函數(shù)執(zhí)行socket=s取得傳遞參數(shù);BufferedReader(new InputStreamReader(socket.getInp utStream()創(chuàng)建輸入流;使用 PrintWriter(new BufferedWriter( new OutputStre amWriter( socket.getOoutp
28、utStream)創(chuàng)建輸出流;使用start()函數(shù)啟動線程;最后使用run()線程監(jiān)聽函數(shù)。3. 登錄驗(yàn)證(1)登錄線程如果客戶端輸入的字符串?login?,表示需要登錄,那么服務(wù)器在接收到該信息后連接數(shù)據(jù)庫,準(zhǔn)備從數(shù)據(jù)庫選擇 昵稱和密碼。服務(wù)器接收到客戶端發(fā)送過來的號碼和密碼信 息后,設(shè)定數(shù)據(jù)庫查尋條件,并執(zhí)行數(shù)據(jù)庫查尋,通過比較 輸入的用戶名和密碼和數(shù)據(jù)庫信息來確定用戶的登錄是否 成功,如果成功就,發(fā)送? ok?給客戶端,通知其進(jìn)入聊天主 界面.反之發(fā)送? false?,提示用戶登錄失敗,如圖3.3所示:客戶端服務(wù)器端圈3. 3登錄流程客戶端服務(wù)器端Socket讀取數(shù)據(jù)庫,并驗(yàn)證賬號與密
29、碼發(fā)送:? login?接收:賬號和密碼接收:? login監(jiān)聽用戶請求發(fā)送:賬號和密碼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. 新建用戶用戶新建過程也在線程監(jiān)聽函數(shù)run()中。當(dāng)服務(wù)器端收到客戶端發(fā)送的?
30、new?請求時,服務(wù)器端開始進(jìn)行新建用戶操作。新建用戶的過程是這樣的:首先要使用權(quán) Class.for Name方法加載數(shù)據(jù)庫驅(qū)動類,該類的描述是 sun.jdbc.odbc. JdbcOdbcDriver;然后使用 DriverManager.getConnection 方法 連接數(shù)據(jù),數(shù)據(jù)商名為jdbc:odbc:javaicq;最后服務(wù)器接收客戶端用戶發(fā)送的昵稱、密碼、用戶 E-mail ,個人資料、籍貫 和頭像等信息,執(zhí)行數(shù)據(jù)庫添加操作完成用戶的創(chuàng)建。服務(wù) 器為新建的用戶指定唯一的注冊號碼,將以即時消息的方法 發(fā)送給用戶。5. 好友處理(1)查找好友當(dāng)客戶端向服務(wù)器查找好友的請求后,服
31、務(wù)器立即響應(yīng)并調(diào)Class.forName方法加載數(shù)據(jù)庫驅(qū)動類 sun.jdbc.odbc.Jdb cOdbcDriver,然后調(diào)用方法 DriverManager.getConnection 完成 數(shù)據(jù)庫的連接,得到用戶好友查詢的結(jié)果。查詢結(jié)果包括: 好友的昵稱、性別、性別、籍貫、個人資料等信息。服務(wù)器 對數(shù)據(jù)庫聽查詢結(jié)果進(jìn)行篩選,只向客戶端的用戶返回好友 的注冊號碼、頭像信息號以及是否在線信息??蛻舳私邮盏?查詢結(jié)果后,利用相應(yīng)的函數(shù)將其顯示出來。(2 )添加好友讀取資料功能是在查找好友功能基礎(chǔ)上建立的。用戶得 到好友列表后,可根據(jù)需要讀取好友的詳細(xì)資料,也可讀取 用戶自己的詳細(xì)資料。服務(wù)
32、器使用Vector矢雖保存客戶端用戶的好友號碼,并返回好友的昵稱、號碼、 IP地址、狀態(tài)、 頭像和個人資料等信息。(3 )添加好友服務(wù)器響應(yīng)客戶端用戶的請求后,首先連接數(shù)據(jù)庫,并 根據(jù)接收的用戶號碼及好友號碼向好友表添加記錄。服務(wù)器 使用r6保存查詢結(jié)果。若r6為1,則表明添加好友成功,服務(wù)器將給客戶端發(fā)出? ok addfriend ?的消息;否則添加好友 失敗,服務(wù)器將給客戶端發(fā)出?falseaddfriend?的消息。(4)添加好友應(yīng)答如果服務(wù)器收到其它用戶添加我為好友的請求后,連接 數(shù)據(jù)庫,根據(jù)接收用戶號碼及好友號碼向好友表添加記錄。 若添加成功,則向用戶傳遞好友的基本信息,比如昵稱。
33、服 務(wù)器利用r5保存處理結(jié)果,并向客戶端輸出結(jié)果。(5 )刪除好友當(dāng)服務(wù)器接受到客戶端刪除好友請求后,它連接數(shù)據(jù)庫, 并根據(jù)接收的用戶號碼及好友號碼表記錄刪除。服務(wù)器利用 r7保存刪除結(jié)果,若r7為1,則刪除成功,服務(wù)器給客戶端發(fā)出? ok delfriend ?的消息;否則刪除好友失敗,服務(wù)器給 客戶端發(fā)出? false delfriend ?的消息。E 3-4處理好友請求接收好友處理請求addnewfrienddelfriendAddfriendfriendfind查找好友讀取好友資料添加好友添加好友應(yīng)答刪除好友YesNoYesYesYesYesNoNoNo返回圖3.4處理好友請求6. 退
34、出下線用戶在線時,數(shù)據(jù)庫表的IP地址字段為此時用戶計(jì)算機(jī) 的真實(shí)IP地址;狀態(tài)字段為1。若用戶退出下線,客戶端向 服務(wù)器端發(fā)送?logout?,服務(wù)器接收到下線請求時,需完成修改IP字段和狀態(tài)字段。服務(wù)器首先利用Class.forName方法加載數(shù)據(jù)庫驅(qū)動類sun.jdbc.odbc.JdbcOdbcDriver ;然后通 過方法DriverManager.getConnection連接數(shù)據(jù)庫存;最后根據(jù)用戶號碼,將其狀態(tài)字段設(shè)為0, IP地址字段設(shè)為空。2.3.4客戶端的設(shè)計(jì)客戶通過Socket與服務(wù)器建立連接。 服務(wù)器與客戶都通 過構(gòu)造 BufferedReader、PrintWriter
35、來建立輸入/輸出流,雙 方通過該輸入/輸出流來相互傳遞信息。一旦收到客戶方的連 接請求,服務(wù)器利用 accept()函數(shù)返回一個新建的 Socket對 象,隨后客戶端向服務(wù)器發(fā)送消息,諸如注冊、登錄和查找 好友等請求,服務(wù)器收到請求后,針對不同的消息處理請求。 在這一過程中,服務(wù)器端與客戶端采用UDP協(xié)議通信。雖然UDP協(xié)議不可靠,但對于聊天工具而言,其可靠性并不 太重要。1.用戶注冊當(dāng)服務(wù)器收到用戶的注冊請求后,開始接收客戶傳遞的 消息,諸如客戶的昵稱、性別、籍貫、頭像和個人資料等信 息。接收完畢后,服務(wù)器便通過JdbcOdbc與后臺數(shù)據(jù)庫連接,向數(shù)據(jù)庫添加記錄。若新用戶注冊,則向客戶返回號
36、碼,并在數(shù)據(jù)庫中注冊 用戶的IP地址,設(shè)定Status值告知用戶在線??蛻羰盏椒?wù) 器返回的消息后,打開主程序窗口,同時創(chuàng)建 UDP以便在 用戶之間建立聯(lián)系。注冊通信過程如圖3.5所示:圖3. 5注冊流程Socket接收完畢發(fā)送:? new?發(fā)送完畢接收:注冊信息接收:? new?監(jiān)聽用戶請求發(fā)送:注冊信息ServeSocket接收:賬號輸出:賬號打開登錄界面結(jié)束數(shù)據(jù)庫操作客戶端正服務(wù)器端圖3.5 注冊流程2. 用戶登錄用戶在客戶端程序中輸入用戶號碼與密碼,與服務(wù)器建 立連接,向服務(wù)器發(fā)送登錄請求。服務(wù)器收到該請求后,通 過JdbcOdbc讀取數(shù)據(jù)庫,與用戶輸入的消息做比較:若用 戶輸入的信息
37、與數(shù)據(jù)庫信息相同,則服務(wù)器向客戶返回成功 消息,將其Status字段設(shè)為1,并注冊用戶當(dāng)前的IP地址; 否則服務(wù)器向客戶返回失敗消息??蛻舳耸盏椒?wù)器的成功 確認(rèn)后,打開聊天主窗口;否則彈出失敗信息。客戶端事件 驅(qū)動與服務(wù)器端的事件監(jiān)聽相對應(yīng)。3. 服務(wù)器連接服務(wù)器連接是在 ConnectServer()函數(shù)中實(shí)現(xiàn)的。本函數(shù) 用到了具有連接性、有序性特點(diǎn)的流,根據(jù)服務(wù)器的IP地址 和端口來完成客戶端與服務(wù)器的連接。IP地址是網(wǎng)絡(luò)中唯一地址的標(biāo)識。服務(wù)器連接過程分服務(wù)器端與客戶端兩部分, 執(zhí)行流程如下:(1)服務(wù)器程序流程程序初始化;填寫本機(jī)地址信息;綁定并監(jiān)聽一個固定的端口 ;收到Client
38、的連接后建立一個 Socket連接; 產(chǎn)生一個新的進(jìn)程與 Client進(jìn)行通信和信息處理; 子通信結(jié)束后中斷與 Client的連接。(2)客戶端程序流程:程序初始化;填寫服務(wù)器地址消息;連接服務(wù)器;與服務(wù)器通信和信息處理;通信結(jié)束后斷開連接。4. 主程序設(shè)計(jì)用戶完成登錄后,客戶端與服務(wù)器端建立連接。連接建立成功后,客戶向服務(wù)器請求讀取好友名單;服務(wù)器收到 該請求,開始讀取數(shù)據(jù)庫中的friend表并得到好友的號碼,再通過jcq表讀取好友資料,向客戶端發(fā)送這些信息;客戶 收到服務(wù)器消息后,在主窗口顯示好友??蛻舳诉€建立矢雖 來存儲好友的昵稱、號碼,頭像編號和IP地址等信息。5. 好友管理(1)查找
39、好友好友查找可利用 FindFriend2類完成,F(xiàn)indFriend2類繼 承自JFrame類。FindFriend2中定義的界面控件包括:好友 的昵稱、性另叭 住址、Jicq號碼、IP地址、在線狀態(tài)、頭像、 電子郵件和個人留言等信息。查找好友所需的網(wǎng)絡(luò)變雖定義如下:Socket socket:連接 socketBufferedReader in;讀入緩沖區(qū)PrintWriter out;輸入緩沖區(qū)int myid;用戶的號碼String serverhost:發(fā)送端的主機(jī)地址int servport:服務(wù)端的主機(jī)地址DatagramPacket sendPacket存儲發(fā)送信息的發(fā)送數(shù)據(jù)報
40、DatagramSocket sendSocket:存儲接收信息的接收數(shù)據(jù) int sendPort:發(fā)送的端口號(2)添加好友用戶添加好友是聊天工具的基本功能之一。添加好友的基本步驟如下:用戶A登錄后,向服務(wù)器發(fā)送查找請求,服務(wù)器響應(yīng)并讀取數(shù)據(jù)庫表icq,將結(jié)果返回給用戶;用戶在收到查詢結(jié)果后選擇用戶B,向服務(wù)器發(fā)送添加好友請求,服務(wù)器收到請求響應(yīng),更新數(shù)據(jù)表frriend,并從icq表中讀取好友基本信息,將信息返回給用戶A;用戶A的客戶端主窗口顯示用戶B,并通過UDP通知用戶B;用戶B收到服務(wù)器的確認(rèn)消息,可決定是否添加用戶 A為好友。(3)刪除好友用戶可以刪除好友列表中指定的好友,客戶端
41、確認(rèn)用戶 操作后向服務(wù)器發(fā)送刪除請求,服務(wù)器收到該請求,連接數(shù) 據(jù)庫表friend并刪除用戶及該好友的記錄。若刪除成功,則 向客戶端返回成功消息,通知用戶。2.3.5消息通信的設(shè)計(jì)消息的發(fā)送主要是通過數(shù)據(jù)報服務(wù)來實(shí)現(xiàn)的。JAVA實(shí)現(xiàn)數(shù)據(jù)報通信的過程除面向連接的Socket外,還有無連接的數(shù)據(jù)報Socketo數(shù)據(jù)報是網(wǎng)絡(luò)層數(shù)據(jù)單元在介質(zhì)上傳輸信息 的邏輯分組格式,它是是一種在網(wǎng)絡(luò)中傳播的、獨(dú)立的自身 包含地址信息的消息,它能否到過目的地,到過的時間,至V 過內(nèi)容是否變化是不能準(zhǔn)確知道的。數(shù)據(jù)報的通信雙方不需 要建立連接,對于像聊天通信這些不需要很高質(zhì)雖的應(yīng)用程 序來說,數(shù)據(jù)報通信是一個非常好的選
42、擇。1、使用數(shù)據(jù)報在 java 的 包中有兩個類 DatagramSocket 和 Dat agramPacket,它們?yōu)閼?yīng)用程序采用數(shù)據(jù)報通信方式進(jìn)行網(wǎng)絡(luò) 通信提供了支持。其定義定義如下:DatagramPacket sendPacket,receivePacket;DatagramSocket sendSocket,receiveSocket;int udpPORT=5001;int sendPort=5000;sendSocket=new DatagramSocket。;receiveSocket=new DatagramSocket(udpPORT);2、發(fā)送消息用戶通過好友列表中好友
43、的IP地址,利用UDP協(xié)議與其他用戶進(jìn)行信息交流。消息發(fā)送之前先創(chuàng)建一個數(shù)據(jù)報文 包,用來實(shí)現(xiàn)無連接的包傳送服務(wù)。每個數(shù)據(jù)報文包是用DatagramPacket類來創(chuàng)建的,DatagramPacket對象封裝了數(shù)據(jù) 報包數(shù)據(jù)、包長度、目標(biāo)地址和目標(biāo)端口。若客戶端發(fā)送數(shù) 據(jù)包,則構(gòu)造函數(shù)創(chuàng)建DatagramPacket對象,將需要發(fā)送的數(shù)據(jù)和包文目的地址信息放入對象之中。在發(fā)送的過程中利用構(gòu)造函數(shù)DatagramPacket (byte bufferedarray,int length,InetAddressaddress,int port)構(gòu)造一個 包長度為length的包,它是將數(shù)據(jù)傳送到指定端口號上的數(shù) 據(jù)包,參數(shù)length必須小于等于 bufferedarry.length.消息發(fā)送 是通過調(diào)用 DatagramPacket對象中有send方法實(shí)現(xiàn)的,它需 要以DatagramPacket對象為參數(shù),將剛才封裝進(jìn)DatagramPacket對象中的數(shù)據(jù)組成數(shù)據(jù)報發(fā)出。發(fā)送數(shù)據(jù)報文包的部分代碼如下:sendPacket=newDatagramPacket(data,data.length,InetAdd ress.getByNam
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 3.3 汽化和液化 說課稿 2025年初中人教版物理八年級上冊
- 開學(xué)心理講座心得體會
- 在戰(zhàn)友聚會上的致詞簡短
- 通信行業(yè)市場研究報告
- 市級體育總會章程范本
- 2025年高鎳锍項(xiàng)目建議書
- 《會計(jì)信息系統(tǒng)應(yīng)用》課件 學(xué)習(xí)情境4 報表系統(tǒng)應(yīng)用
- 《電子商務(wù)基礎(chǔ)》課件-話題1 電子商務(wù)概述
- 軟件開發(fā)項(xiàng)目居間協(xié)議模板
- 商業(yè)零售實(shí)體店數(shù)字化轉(zhuǎn)型與升級策略設(shè)計(jì)
- 大跨度空間網(wǎng)架結(jié)構(gòu)分階段整體提升安裝技術(shù)研究與應(yīng)用
- 注射用頭孢比羅酯鈉-臨床藥品應(yīng)用解讀
- 農(nóng)業(yè)領(lǐng)域的服務(wù)禮儀
- 大學(xué)生心理健康教育教程 課件 第二章 大學(xué)生自我意識
- 公證知識宣傳材料
- 聚酯生產(chǎn)技術(shù) 聚酯主要設(shè)備介紹
- 鈑金結(jié)構(gòu)件點(diǎn)檢表
- 醫(yī)療安全(不良)事件匯總登記表(科室)
- 電子商務(wù)專升本考試(習(xí)題卷6)
- 鑄造企業(yè)采購流程及管理制度
- 胸痛中心培訓(xùn)考試題(ACS醫(yī)護(hù)人員版)附有答案附有答案
評論
0/150
提交評論