聊聊天系統(tǒng) 需求分析
《聊聊天系統(tǒng) 需求分析》由會員分享,可在線閱讀,更多相關(guān)《聊聊天系統(tǒng) 需求分析(36頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、 目錄 系統(tǒng)分析與設(shè)計 0 2.1 需求分析 10 2.2系統(tǒng)總體框架 12 2.2.1總體設(shè)計 12 2.2.2功能模塊 13 2.3系統(tǒng)詳細設(shè)計 24 2.3.1多線程設(shè)計 24 2.3.2數(shù)據(jù)庫設(shè)計 25 2.3.3服務(wù)器的設(shè)計 25 2.3.4客戶端的設(shè)計 26 2.3.5消息通信的設(shè)計 26 緒論 1.1選題背景 1.1.1 即時消息系統(tǒng)的研究現(xiàn)狀 即時消息系統(tǒng)[1](Instant Messenger,IM)是一種在后 PC 時代興起的,以 Internet 網(wǎng)絡(luò)為基礎(chǔ)的,允許
2、交互雙方即時地傳送文字、語音、視頻等信息,能夠跟蹤網(wǎng)絡(luò)用戶在線狀態(tài)的網(wǎng)絡(luò)應(yīng)用軟件。即時消息系統(tǒng)產(chǎn)生有著深刻的社會原因:人們都有渴望社交,獲得社會尊重、實現(xiàn)自我的需求,這正是即時消息軟件風(fēng)行的原動力,而物質(zhì)文明的日益發(fā)達所帶來副作用,又使得人們習(xí)慣與周圍的人保持距離,以致人們更愿意對陌生人敞開心扉,在網(wǎng)絡(luò)中可以跨越年齡、身份、行業(yè)、地域的限制,達到人與人、人與信息之間的零距離交流。從這點上講,即時消息系統(tǒng)的出現(xiàn)改變了人們的溝通方式和交友文化,大大拓展了個人生活交流的空間。 國內(nèi)最為流行的即時消息軟件是 OICQ(簡稱 QQ) 。它以良好的中文界面和不斷增強的功能形成了一定的 QQ 網(wǎng)絡(luò)文化。該
3、軟件是由騰訊公司于 1999 年 2 月自主開發(fā)的基于Internet的即時消息系統(tǒng)。騰訊QQ 目前已成為中國最主要的即時消息服務(wù)網(wǎng)絡(luò)軟件。作為一種即時消息工具,QQ 支持顯示好友在線、即時傳送文字、語音和文件等功能。 QQ 還與無線尋呼、GSM 短信息、IP 電話網(wǎng)互聯(lián),為用戶提供互聯(lián)網(wǎng)短信及信息增值服務(wù)。騰訊 QQ 開發(fā)和拓展統(tǒng)一、高速、豐富的互聯(lián)網(wǎng)應(yīng)用平臺、在線廣告業(yè)務(wù)、移動通信業(yè)務(wù)、ISP及IP電話合作業(yè)務(wù)、企業(yè)商用即時消息服務(wù)、在線客戶支持及在線呼叫業(yè)務(wù)。 1.1.2 即時消息系統(tǒng)的發(fā)展趨勢 21世紀將是網(wǎng)絡(luò)化、信息化的世紀,信息的融合已經(jīng)成為社會發(fā)展的主流方向[2]。即時消
4、息系統(tǒng)將不斷與信息交流領(lǐng)域的系統(tǒng)相互集成和滲透,擴展其自己的功能和應(yīng)用范圍,滿足未來話音,數(shù)據(jù)和視頻的多媒體應(yīng)用需要,使即時消息以更豐富的接入方法,更高的服務(wù)質(zhì)量,更友好的面貌呈現(xiàn)在世人的面前。 從功能角度來看,即時消息系統(tǒng)向支持全媒體方向發(fā)展,隨著多媒體技術(shù)在網(wǎng)絡(luò)應(yīng)用中的發(fā)展,即時消息系統(tǒng)承載的媒體,不再局限于原來的文字、語音和文件的信息交換,信息載體擴展到圖形、圖像和流媒體等多媒體業(yè)務(wù)上。目前ICQ 和 QQ預(yù)設(shè)了部分簡單的表情圖像, 通過傳輸圖像代碼來傳遞表情圖像,可以被視為即時消息開發(fā)商開發(fā)支持圖形、圖像為載體的即時消息軟件的開端。 從應(yīng)用范圍角度來看,即時消息系統(tǒng)集中在 In
5、ternet 個人用戶之間的信息交流應(yīng)用,隨著網(wǎng)絡(luò)技術(shù)應(yīng)用的發(fā)展,即時消息系統(tǒng)應(yīng)用范圍向園區(qū)化、集團化拓展,應(yīng)用領(lǐng)域突破個人,而用于遠程教學(xué)、遠程醫(yī)療、遠程演示、網(wǎng)絡(luò)會議等領(lǐng)域。 1.1.3論文研究的主要內(nèi)容 本論文的主要工作是利用編程技術(shù)建立一基于 J2SE 的即時消息系統(tǒng),主要實現(xiàn)網(wǎng)絡(luò)即時聊天功能。在建立這個系統(tǒng)的過程中,我將會研究JAVA語言,多線程編程、網(wǎng)絡(luò)編程以及數(shù)據(jù)據(jù)等方面的知識。 在我的論文中,我將會研究即時消息的發(fā)展,并針對不同即時消息工具之間不能互通的弊端,介紹即時消息系統(tǒng)中的應(yīng)用。為了更好地實現(xiàn)系統(tǒng),我們還要研究J2SE 技術(shù)。在論文中介紹了 J2SE 的體系結(jié)構(gòu)、
6、系統(tǒng)設(shè)計以及 J2SE 的開發(fā)環(huán)境。熟悉了開發(fā)平臺,我們還要了解 基于TCP/IP 的 Socket 網(wǎng)絡(luò)連接的基礎(chǔ)知識,包括網(wǎng)絡(luò)通信系統(tǒng)架構(gòu)及 Socket 通信在該系統(tǒng)中的應(yīng)用等內(nèi)容。在論文中將著重介紹網(wǎng)絡(luò)即時消息系統(tǒng)的設(shè)計和實現(xiàn),包括界面及各個功能模塊的設(shè)計,給出了相應(yīng)的流程圖并對其功能做了詳細描述,最終實現(xiàn)了客戶端之間的即時聊天通信功能。最后是結(jié)尾部分,對本文做了總結(jié)并針對該系統(tǒng)提出了一些不足和今后需要改進的地方。 1.2 技術(shù)背景 1.2.1 C/S 模型 在網(wǎng)絡(luò)連接模式中,除對等網(wǎng)外,還有另一種形式的網(wǎng)絡(luò),即客戶機/服務(wù)器網(wǎng)[3],Client/Server。在客戶機
7、/服務(wù)器網(wǎng)絡(luò)中,服務(wù)器是網(wǎng)絡(luò)的核心,而客戶機是網(wǎng)絡(luò)的基礎(chǔ),客戶機依靠服務(wù)器獲得所需要的網(wǎng)絡(luò)資源,而服務(wù)器為客戶機提供網(wǎng)絡(luò)必須的資源。 這里客戶和服務(wù)器都是指通信中所涉及的兩個應(yīng)用進程(軟件)。使用計算機的人是計算機的“用戶”(user)而不是“客戶”(client)。但在許多國外文獻中,也經(jīng)常把運行客戶程序的機器稱為client(這種情況下也可把client譯為“客戶機”),把運行服務(wù)器程序的機器稱為server。所以有時要根據(jù)上下文判斷client與server是指軟件還是硬件。 它是軟件系統(tǒng)體系結(jié)構(gòu),通過它可以充分利用兩端硬件環(huán)境的優(yōu)勢,將任務(wù)合理分配到 Client端和Server端
8、來實現(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)用都可以進行同樣的業(yè)務(wù)處理,應(yīng)用不同的模塊共享邏輯組件;因此,內(nèi)部的和外部的用戶都可以訪問新的和現(xiàn)有的應(yīng)用系統(tǒng),通過現(xiàn)有應(yīng)用系統(tǒng)中的邏輯可以擴展出新的應(yīng)用系統(tǒng)。這也就是目前應(yīng)用系統(tǒng)的發(fā)展方向。 1.2.2 TCP/IP 協(xié)議 1. IP 網(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ā)送到更高層---
9、TCP或UDP層;相反,IP層也把從TCP或UDP層接收來的數(shù)據(jù)包傳送到更低層。IP數(shù)據(jù)包是不可靠的,因為IP并沒有做任何事情來確認數(shù)據(jù)包是按順序發(fā)送的或者沒有被破壞。IP數(shù)據(jù)包中含有發(fā)送它的主機的地址(源地址)和接收它的主機的地址(目的地址)。 高層的TCP和UDP服務(wù)在接收數(shù)據(jù)包時,通常假設(shè)包中的源地址是有效的。也可以這樣說,IP地址形成了許多服務(wù)的認證基礎(chǔ),這些服務(wù)相信數(shù)據(jù)包是從一個有效的主機發(fā)送來的。IP確認包含一個選項,叫作IP source routing,可以用來指定一條源地址和目的地址之間的直接路徑。對于一些TCP和UDP的服務(wù)來說,使用了該選項的IP包好像是從路徑上的最后
10、一個系統(tǒng)傳遞過來的,而不是來自于它的真實地點。這個選項是為了測試而存在的,說明了它可以被用來欺騙系統(tǒng)來進行平常是被禁止的連接。那么,許多依靠IP源地址做確認的服務(wù)將產(chǎn)生問題并且會被非法入侵。 2. TCP 如果IP數(shù)據(jù)包中有已經(jīng)封好的TCP數(shù)據(jù)包[5],那么IP將把它們向‘上’傳送到TCP層。TCP將包排序并進行錯誤檢查,同時實現(xiàn)虛電路間的連接。TCP數(shù)據(jù)包中包括序號和確認,所以未按照順序收到的包可以被排序,而損壞的包可以被重傳。 TCP將它的信息送到更高層的應(yīng)用程序,例如Telnet的服務(wù)程序和客戶程序。應(yīng)用程序輪流將信息送回TCP層,TCP層便將它們向下傳送到IP層,設(shè)備驅(qū)動程序
11、和物理介質(zhì),最后到接收方。 面向連接的服務(wù)(例如Telnet、FTP、rlogin、X Windows和SMTP)需要高度的可靠性,所以它們使用了TCP。DNS在某些情況下使用TCP(發(fā)送和接收域名數(shù)據(jù)庫),但使用UDP傳送有關(guān)單個主機的信息。 3. UDP UDP與TCP位于同一層,但它不管數(shù)據(jù)包的順序、錯誤或重發(fā)。因此,UDP不被應(yīng)用于那些使用虛電路的面向連接的服務(wù),UDP主要用于那些面向查詢---應(yīng)答的服務(wù),例如NFS。相對于FTP或Telnet,這些服務(wù)需要交換的信息量較小。使用UDP的服務(wù)包括NTP(網(wǎng)絡(luò)時間協(xié)議)和DNS(DNS也使用TCP)。 欺騙UDP包比欺騙TCP包
12、更容易,因為UDP沒有建立初始化連接(也可以稱為握手)(因為在兩個系統(tǒng)間沒有虛電路),也就是說,與UDP相關(guān)的服務(wù)面臨著更大的危險。 4. TCP與UDP的端口結(jié)構(gòu) TCP和UDP服務(wù)通常有一個客戶/服務(wù)器的關(guān)系,例如,一個Telnet服務(wù)進程開始在系統(tǒng)上處于空閑狀態(tài),等待著連接。用戶使用Telnet客戶程序與服務(wù)進程建立一個連接。客戶程序向服務(wù)進程寫入信息,服務(wù)進程讀出信息并發(fā)出響應(yīng),客戶程序讀出響應(yīng)并向用戶報告。因而,這個連接是雙工的,可以用來進行讀寫。 兩個系統(tǒng)間的多重Telnet連接是如何相互確認并協(xié)調(diào)一致呢?TCP或UDP連接唯一地使用每個信息中的如下四項進行確認: l
13、 源IP地址: 發(fā)送包的IP地址; l 目的IP地址: 接收包的IP地址; l 源端口: 源系統(tǒng)上的連接的端口; l 目的端口: 目的系統(tǒng)上的連接的端口。 端口是一個軟件結(jié)構(gòu),被客戶程序或服務(wù)進程用來發(fā)送和接收信息。一個端口對應(yīng)一個16比特的數(shù)。服務(wù)進程通常使用一個固定的端口,例如,SMTP使用25、Xwindows使用6000。這些端口號是‘廣為人知’的,因為在建立與特定的主機或服務(wù)的連接時,需要這些地址和目的地址進行通訊 1.2.3編程技術(shù) 1.JAVA語言 Java[6]是由Sun Microsystems公司于1995年5月推出的Java程序設(shè)計語言(以下簡稱Ja
14、va語言)和Java平臺的總稱。用Java實現(xiàn)的HotJava瀏覽器(支持Java applet)顯示了Java的魅力:跨平臺、動態(tài)的Web、Internet計算。從此,Java被廣泛接受并推動了Web的迅速發(fā)展,常用的瀏覽器現(xiàn)在均支持Java applet。另一方面,Java技術(shù)也不斷更新。 Java語言的優(yōu)良特性使得Java應(yīng)用具有無比的健壯性和可靠性,這也減少了應(yīng)用系統(tǒng)的維護費用。Java對對象技術(shù)的全面支持和Java平臺內(nèi)嵌的API[7]能縮短應(yīng)用系統(tǒng)的開發(fā)時間并降低成本。Java的編譯一次,到處可運行的特性使得它能夠提供一個隨處可用的開放結(jié)構(gòu)和在多平臺之間傳遞信息的低成本方式。特
15、別是Java企業(yè)應(yīng)用編程接口(Java Enterprise APIs)為企業(yè)計算及電子商務(wù)應(yīng)用系統(tǒng)提供了有關(guān)技術(shù)和豐富的類庫。 2. Winsock Windows下網(wǎng)絡(luò)編程的規(guī)范-Windows Sockets是Windows下得到廣泛應(yīng)用的、開放的、支持多種協(xié)議的網(wǎng)絡(luò)編程接口。 通信的基礎(chǔ)是套接口(Socket),一個套接口是通訊的一端。在這一端上你可以找到與其對應(yīng)的一個名字。一個正在被使用的套接口都有它的類型和與其相關(guān)的進程。套接口存在于通訊域中。通訊域是為了處理一般的線程通過套接口通訊而引進的一種抽象概念。 在一次網(wǎng)絡(luò)通信/連接中有以下幾個參數(shù)需要被設(shè)置:本地IP地址 - 本
16、地端口號 - 對方端口號 - 對方IP地址。左邊兩部分稱為一個半關(guān)聯(lián),當與右邊兩部分建立連接后就稱為一個全關(guān)聯(lián)。在這個全關(guān)聯(lián)的套接口上可以雙向的交換數(shù)據(jù)。如果是使用無連接的通信則只需要建立一個半關(guān)聯(lián),在發(fā)送和接收時指明另一半的參數(shù)就可以了,所以可以說無連接的通信是將數(shù)據(jù)發(fā)送到另一臺主機的指定端口。此外不論是有連接還是無連接的通信都不需要雙方的端口號相同。Socket 接口是訪問 Internet 使用得最廣泛的方法。 3.多線程編程 多線程[8]是為了使得多個線程并行的工作以完成多項任務(wù),以提高系統(tǒng)的效率。線程是在同一時間需要完成多項任務(wù)的時候被實現(xiàn)的。 使用線程的好處有以下幾點:
17、 使用線程可以把占據(jù)長時間的程序中的任務(wù)放到后臺去處理 用戶界面可以更加吸引人,這樣比如用戶點擊了一個按鈕去觸發(fā)某些事件的處理,可以彈出一個進度條來顯示處理的進度 程序的運行速度可能加快 在一些等待的任務(wù)實現(xiàn)上如用戶輸入、文件讀寫和網(wǎng)絡(luò)收發(fā)數(shù)據(jù)等,線程就比較有用了。在這種情況下我們可以釋放一些珍貴的資源如內(nèi)存占用等等。 多線程在JAVA里面的應(yīng)用也是很廣泛。Java對多線程的支持是非常強大的,他屏蔽掉了許多的技術(shù)細節(jié),讓我們可以輕松的開發(fā)多線程的應(yīng)用程序。 1.2.4開發(fā)平臺 1. J2SE平臺 Java2平臺包括:標準版(J2SE)、企業(yè)版(J2EE)和微縮版(J
18、2ME)三個版本。J2SE,J2ME和J2EE,這也就是SunONE(Open NetEnvironment)體系。J2SE就是Java2的標準版,主要用于桌面應(yīng)用軟件的編程;J2ME主要應(yīng)用于嵌入是系統(tǒng)開發(fā),如手機和PDA的編程;J2EE是Java2的企業(yè)版,主要用于分布式的網(wǎng)絡(luò)程序的開發(fā),如電子商務(wù)網(wǎng)站和ERP系統(tǒng)。 Standard Edition(標準版) J2SE 包含那些構(gòu)成Java語言核心的類。比如:數(shù)據(jù)庫連接、接口定義、輸入/輸出、網(wǎng)絡(luò)編程定位在客戶端,主要用于桌面應(yīng)用軟件的編程。J2SE 包含那些構(gòu)成Java語言核心的類。 比如:數(shù)據(jù)庫連接、接口定義、輸入/輸出、網(wǎng)絡(luò)編程
19、 2. MYSQL數(shù)據(jù)庫 MYSQL [9]的特性MYSQL 的特性包括: Internet 集成。 SQL Server 2000 數(shù)據(jù)庫引擎提供完整的 XML 支持。它還具有構(gòu)成最大的 Web 站點的數(shù)據(jù)存儲組件所需的可伸縮性、可用性和安全功能。MYSQL 程序設(shè)計模型與 Windows DNA 構(gòu)架集成,用以開發(fā) Web 應(yīng)用程序,并且 MYSQL 支持 English Query 和 Microsoft 搜索服務(wù)等功能,在 Web 應(yīng)用程序中包含了用戶友好的查詢和強大的搜索功能。 可伸縮性和可用性。 同一個數(shù)據(jù)庫引擎可以在不同的平臺上使用,從運行 Microsoft Windo
20、ws 98 的便攜式電腦,到運行 MYSQL 數(shù)據(jù)中心版的大型多處理器服務(wù)器。MYSQL 企業(yè)版支持聯(lián)合服務(wù)器、索引視圖和大型內(nèi)存支持等功能,使其得以升級到最大 Web 站點所需的性能級別。 企業(yè)級數(shù)據(jù)庫功能。 MYSQL 關(guān)系數(shù)據(jù)庫引擎支持當今苛刻的數(shù)據(jù)處理環(huán)境所需的功能。數(shù)據(jù)庫引擎充分保護數(shù)據(jù)完整性,同時將管理上千個并發(fā)修改數(shù)據(jù)庫的用戶的開銷減到最小。MYSQL 分布式查詢使您得以引用來自不同數(shù)據(jù)源的數(shù)據(jù),就好象這些數(shù)據(jù)是 MYSQL 數(shù)據(jù)庫的一部分,同時分布式事務(wù)支持充分保護任何分布式數(shù)據(jù)更新的完整性。復(fù)制同樣使您得以維護多個數(shù)據(jù)復(fù)本,同時確保單獨的數(shù)據(jù)復(fù)本保持同步。可將一組數(shù)據(jù)復(fù)制到
21、多個移動的脫接用戶,使這些用戶自主地工作,然后將他們所做的修改合并回發(fā)布服務(wù)器。 易于安裝、部署和使用。 MYSQL 中包括一系列管理和開發(fā)工具,這些工具可改進在多個站點上安裝、部署、管理和使用 SQL Server 的過程。MYSQL 還支持基于標準的、與 Windows DNA 集成的程序設(shè)計模型,使 MYSQL 數(shù)據(jù)庫和數(shù)據(jù)倉庫的使用成為生成強大的可伸縮系統(tǒng)的無縫部分。這些功能使您得以快速交付 MYSQL 應(yīng)用程序,使客戶只需最少的安裝和管理開銷即可實現(xiàn)這些應(yīng)用程序。 系統(tǒng)分析與設(shè)計 2.1 需求分析
22、 此次開發(fā)的網(wǎng)絡(luò)聊天工具可作為個人的交流工具使用,通信的安全性不是很高,但要求信息的響應(yīng)速度要較快,讓用戶充分享受到網(wǎng)絡(luò)即時消息的方便和快捷。本聊天工具由服務(wù)器端程序和客戶端程序兩部分組成,整體采用JAVA平臺開發(fā),并使用MYSQL管理數(shù)據(jù)庫數(shù)據(jù)。服務(wù)器是可以監(jiān)聽和查看用戶的基本操作;客戶端程序面向?qū)嶋H用戶,它有必要的界面的按鈕,向用戶提供網(wǎng)絡(luò)即時消息的功能: 本聊天需包含如下基本功能: 1.客戶端: (1)新用戶注冊; (2)用戶登錄驗證; (3)獲取好友列表并顯示好友狀態(tài)(在線/不在線); (4)添加用戶好友; (5)刪除用戶好友; (6)用戶與好友聊天(可查看聊天記錄
23、); (7)接收系統(tǒng)信息。 2.服務(wù)端: (1)啟動和關(guān)閉后臺服務(wù)器; (2)查看客戶端登錄的相關(guān)信息(客戶端登陸時間/登陸IP); (3) 向所有在線用戶發(fā)送系統(tǒng)消息。 2.2系統(tǒng)總體框架 2.2.1總體設(shè)計 網(wǎng)絡(luò)即時通訊系統(tǒng)采用客戶機/服務(wù)器(C/S)的模式來設(shè)計,是一個3層的C/S結(jié)構(gòu):數(shù)據(jù)庫服務(wù)器->應(yīng)用程序服務(wù)器端->應(yīng)用程序客戶端。系統(tǒng)采用C/S結(jié)構(gòu),可以將任務(wù)合理分配到客戶機端和服務(wù)器端,從而降低了系統(tǒng)的通信開銷,如圖3.1所示: 圖3.1 C/S體系結(jié)構(gòu) 1. 客戶層 客戶層也叫應(yīng)用層,是應(yīng)用程序的用戶接口部分。給聊天工具設(shè)計一個客戶層具
24、有很多優(yōu)點,這是因為客戶層擔(dān)負著用戶與應(yīng)用間的對話功能。它用于檢查用戶的輸入數(shù)據(jù),顯示應(yīng)用的輸出數(shù)據(jù)。為了使用戶能直觀地進行操作,客戶層需要合作圖形用戶接口。若聊天用戶變更,系統(tǒng)只需要改寫顯示控制和數(shù)據(jù)檢查程序即可,而不影響其他兩層。數(shù)據(jù)檢查的內(nèi)容限于數(shù)據(jù)的形式和值的范圍,不包括有關(guān)業(yè)務(wù)本身的處理邏輯。 2.服務(wù)層 服務(wù)層也叫功能層,相當于應(yīng)用的本體,它是將具體的業(yè)務(wù)處理邏輯編入程序中。例如,用戶需要檢索數(shù)據(jù),系統(tǒng)設(shè)法將有關(guān)檢索要求的信息一次性地傳送給功能層;而用戶登錄后,聊天登錄信息是由功能層處理過的檢索結(jié)果數(shù)據(jù),它也是一次性傳送給表示層的。在應(yīng)用設(shè)計中,必須避免表示層和功能層之間進行多
25、次的數(shù)據(jù)交換,這就需要盡可能進行一次性的業(yè)務(wù)處理,達到優(yōu)化整體設(shè)計的目的。 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功能模塊 聊天工具按如下過程完成通信: l 客戶向服務(wù)器注冊,告知服務(wù)器它在監(jiān)聽某主題; l 客戶注冊之后,向服務(wù)器發(fā)送消息; l 服務(wù)器再把消息發(fā)送給所有監(jiān)聽些主題的客戶。 聊天工具由服務(wù)器端和客戶端組成,要分析清楚兩方面所要完成的任務(wù),對設(shè)計來說,等于完成了一半。根據(jù)聊
26、天的通信步驟,系統(tǒng)的功能模塊如圖3.2所示: 即時消息系統(tǒng) 服務(wù)器端 客戶端 后臺操作 建立連接. 監(jiān)聽客戶請求 用戶登錄消息 用戶管理 好友管理 聊天功能 用戶登錄 用戶注冊 查找好友 添加好友 刪除好友 發(fā)送消息 接收消息 聊天記錄 數(shù)據(jù)庫操作 發(fā)送系統(tǒng)消息 消息管理 圖3.2 功能模塊 1.服務(wù)器端 服務(wù)器完成5大功能:建立連接、監(jiān)聽客戶請求、操作數(shù)據(jù)庫、查看用戶登錄消息和發(fā)送系統(tǒng)消息這5大功能的具體含義如下: l 建立連接:系統(tǒng)啟動時建立一個S
27、erverSocket連接,綁定本地計算機的一個端口,不斷偵聽是否有客戶端連接或者斷開連接。 l 監(jiān)聽客戶請求:服務(wù)器端是一個信息的樞紐,所有客戶端的信息都要傳到服務(wù)器端,再由服務(wù)器根據(jù)要求分發(fā)出去,客戶端在向服務(wù)器發(fā)送各種請求,如:上線、隱身、獲取我的好友、查找好友等等。 l 數(shù)據(jù)庫操作:當客戶機向服務(wù)器發(fā)送請求時,服務(wù)器需要通過數(shù)據(jù)庫管理軟件對數(shù)據(jù)庫的數(shù)據(jù)進行增、刪和查詢。如錄入用戶信息、修改用戶信息、查找好友數(shù)據(jù)庫的資料以及添加好友數(shù)據(jù)到數(shù)據(jù)庫等。 l 用戶登錄消息:在服務(wù)器端的界面上,我們可以看到用戶的登錄消息,包括IP地址、端口號,登錄時間等。 l 發(fā)送系統(tǒng)消息:在客戶端管理
28、界面上,可以輸入消息,并發(fā)送給所有的在線用戶。 2.客戶端 客戶端完成3大功能:用戶管理、好友管理和聊天功能,這些功能的含義如下: l 用戶管理:此功能又包括2個子功能,用戶登錄和用戶注冊。客戶端與服務(wù)器端建立通信通道,向服務(wù)器發(fā)送新建用戶的信息,接收來自服務(wù)器聽信息進行注冊。注冊完畢后,可以通過系統(tǒng)的登錄界面,輸入賬號和密碼,然后發(fā)送到服務(wù)器進行驗證。如果驗證通過,則打開程序的主界面。 l 好友管理:此功能又包括3個子功能,查找好友、添加好友和刪除好友。在程序的主界面,提供查找好友的功能。查找好友時,客戶端向服務(wù)器發(fā)送查找好友請求,服務(wù)器端返回在線用戶的信息,此時我們可以通過此來進行
29、添加好友,并跟好友通過通信連接。 l 聊天功能:客戶端在與好友端建立通信連接后,便可以與好友進行聊天,聊天時發(fā)送的是文本信息,好友端在接收到聊天消息后,會提示收到消息,并由好友端自主打開消息接收界面。所有的聊天消息都會被保存起來,可以查看與每個好友的聊天記錄。聊天記錄包括內(nèi)容和時間。 2.3系統(tǒng)詳細設(shè)計 2.3.1多線程設(shè)計 1.服務(wù)器端的多線程 服務(wù)器需要和多個客戶端同時進行通信,這就是服務(wù)器端的多線程。一旦服務(wù)器發(fā)現(xiàn)一個新的客戶端與之建立了連接,就馬上新建一個線程與客戶端進行通信。用多線程的好處在于可以同時處理多個通信連接,不會出于由于數(shù)據(jù)排隊而發(fā)生的延遲或者丟失,可以很
30、好利用系統(tǒng)的性能。 服務(wù)器為每個連接著的客戶建立一個線程,為了同時響應(yīng)多個客戶端,需設(shè)計一個主線程來啟動服務(wù)器端的多線程。主線程與進程結(jié)構(gòu)類似,它在獲得新連接時生成一個線程來處理這個這個連接。線程調(diào)度速度快,占用資源少,可共享進程空間中的數(shù)據(jù),因此服務(wù)器的響應(yīng)速度較快,且I/O吞吐量較大。在程序的代碼里面,服務(wù)器端的多線程類定義為: Class ServerThread extends Thread{//略}; 2.客戶端的多線程 客戶端能夠完成信息的接收和發(fā)送操作,這與服務(wù)器的多線程概念不同,可以采用循環(huán)等待的方法來實現(xiàn)客戶端。利用循環(huán)等待的方式,客戶端首先接收用戶輸入的內(nèi)容并將它們
31、發(fā)送到服務(wù)器端,然后接收來自服務(wù)器端的信息,將其返回給客戶端的用戶。在程序的代碼里面,客戶端的多線程定義為: class MainWin extends JFrame implements Runnable{//略}; 2.3.2數(shù)據(jù)庫設(shè)計 數(shù)據(jù)庫表主要用來存放用戶的注冊信息和用戶的好友資料,可利用兩張數(shù)據(jù)表用來存放用戶信息和用戶好友資料。在MYSQL 上新建名為javaicq的數(shù)據(jù)庫,并建立兩張數(shù)據(jù)庫表:用戶的基本信息表(表名icq)和用戶好友數(shù)據(jù)庫表(表名friend). 1.icq表 icq表存放用戶信息,信息。利用MYSQL 2000建立數(shù)據(jù)表,如表3.1所示: 表3.1
32、 用戶信息表 字段 數(shù)據(jù)類型 說明 Ip int 用戶Ip Id char 用戶的賬號 name char 用戶的昵稱 Ip bit 用戶ip 2.frind 表 friend 表的設(shè)計比較簡單,本系統(tǒng)設(shè)計了用戶的號碼和好友的號碼兩個字段。利用SQL Server 2000建立如下數(shù)據(jù)表: 表 3.2 好友信息表 字段 數(shù)據(jù)類型 說明 ip char 用戶Ip id char 好友的賬號 2.3.3服務(wù)器的設(shè)計 1.主服務(wù)器類的設(shè)計 主服務(wù)器實現(xiàn)了服務(wù)器的多線程,服務(wù)器端有一個進程(或多個進程)在指定的端口等待客戶的連接信息。一
33、時連接成功,就可以按設(shè)計的數(shù)據(jù)交換方法和格式進行數(shù)據(jù)傳輸??蛻舳酥辉谛枰臅r候向服務(wù)端發(fā)出連接請求。主服務(wù)器類調(diào)用ServerThread類,而每個ServerThread實體就是一個單獨的線程,即對應(yīng)于客戶端連接請求響應(yīng)的線程。它的執(zhí)行過程如下: l 使用ServerSocket s=new ServerSocket(8000)語句 綁定8000端口創(chuàng)建套接口 l 使用Socket=s.accept()來監(jiān)聽用戶的請求 l 使用new ServerThread(socket)語句創(chuàng)建新的線程。 2.ServerThread類的設(shè)計 客戶端發(fā)送連接請求的時候,服務(wù)器端創(chuàng)建一個Se
34、rverThread(socket)線程。ServerThread類的函數(shù)執(zhí)行過程可描述如下: l 執(zhí)行ServerThreadz(Socket s)線程構(gòu)造函數(shù) l 執(zhí)行socket=s取得傳遞參數(shù); l BufferedReader(new InputStreamReader(socket.getInputStream()))創(chuàng)建輸入流; l 使用PrintWriter(new BufferedWriter( new OutputStreamWriter( socket.getOoutputStream)))創(chuàng)建輸出流; l 使用start()函數(shù)啟動線程; l 最后使用run
35、()線程監(jiān)聽函數(shù)。 3.登錄驗證 (1)登錄線程 如果客戶端輸入的字符串“l(fā)ogin”,表示需要登錄,那么服務(wù)器在接收到該信息后連接數(shù)據(jù)庫,準備從數(shù)據(jù)庫選擇昵稱和密碼。服務(wù)器接收到客戶端發(fā)送過來的號碼和密碼信息后,設(shè)定數(shù)據(jù)庫查尋條件,并執(zhí)行數(shù)據(jù)庫查尋,通過比較輸入的用戶名和密碼和數(shù)據(jù)庫信息來確定用戶的登錄是否成功,如果成功就,發(fā)送“ok”給客戶端,通知其進入聊天主界面.反之發(fā)送“false”,提示用戶登錄失敗,如圖3.3所示: 客戶端 服務(wù)器端 Socket 讀取數(shù)據(jù)庫,并驗證賬號與密碼 發(fā)送:“l(fā)ogin” 接收:賬號和密碼 接收:“l(fā)ogi
36、n” 監(jiān)聽用戶請求 發(fā)送:賬號和密碼 ServeSocket 接收:“ok” 發(fā)送:“ok” 打開程序主界面 把IP地址和在線狀態(tài)錄入數(shù)據(jù)庫 數(shù)據(jù)庫 結(jié)束 通知好友 圖3.3 登錄流程 (2)通知好友 通知好友也是在ServerThread類的run()函數(shù)里面,當某一用戶成功登錄后,發(fā)送“getwhoaddme”到服務(wù)器端,服務(wù)器端查找數(shù)據(jù)庫中的“friend”數(shù)據(jù)表,并把用戶的所有好友消息及在線狀態(tài)發(fā)送回客戶端,客戶端通過這些好友的消息,向在線的好友發(fā)送上線通知。 4.新建用戶 用戶新建過程也在線程監(jiān)聽函
37、數(shù)run()中。當服務(wù)器端收到客戶端發(fā)送的“new”請求時,服務(wù)器端開始進行新建用戶操作。新建用戶的過程是這樣的:首先要使用權(quán)Class.forName方法加載數(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)查找好友 當客戶
38、端向服務(wù)器查找好友的請求后,服務(wù)器立即響應(yīng)并調(diào)Class.forName方法加載數(shù)據(jù)庫驅(qū)動類sun.jdbc.odbc.JdbcOdbcDriver,然后調(diào)用方法DriverManager.getConnection完成數(shù)據(jù)庫的連接,得到用戶好友查詢的結(jié)果。查詢結(jié)果包括:好友的昵稱、性別、性別、籍貫、個人資料等信息。服務(wù)器對數(shù)據(jù)庫聽查詢結(jié)果進行篩選,只向客戶端的用戶返回好友的注冊號碼、頭像信息號以及是否在線信息??蛻舳私邮盏讲樵兘Y(jié)果后,利用相應(yīng)的函數(shù)將其顯示出來。 (2)添加好友 讀取資料功能是在查找好友功能基礎(chǔ)上建立的。用戶得到好友列表后,可根據(jù)需要讀取好友的詳細資料,也可讀取用戶自己的
39、詳細資料。服務(wù)器使用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ù)接收用戶號碼及好友號碼向好友表添加記錄。若添加成功,則向用戶傳遞好友的基本信息,
40、比如昵稱。服務(wù)器利用r5保存處理結(jié)果,并向客戶端輸出結(jié)果。 (5)刪除好友 當服務(wù)器接受到客戶端刪除好友請求后,它連接數(shù)據(jù)庫,并根據(jù)接收的用戶號碼及好友號碼表記錄刪除。服務(wù)器利用r7保存刪除結(jié)果,若r7為1,則刪除成功,服務(wù)器給客戶端發(fā)出“ok delfriend”的消息;否則刪除好友失敗,服務(wù)器給客戶端發(fā)出“false delfriend”的消息。 接收好友處理請求 addnewfriend delfriend Addfriend friend find 查找好友 讀取好友資料 添加好友 添加好友應(yīng)答 刪除
41、好友 Yes No Yes Yes Yes Yes No No No 返回 圖3.4 處理好友請求 6.退出下線 用戶在線時,數(shù)據(jù)庫表的IP地址字段為此時用戶計算機的真實IP地址;狀態(tài)字段為1。若用戶退出下線,客戶端向服務(wù)器端發(fā)送“l(fā)ogout”,服務(wù)器接收到下線請求時,需完成修改IP字段和狀態(tài)字段。服務(wù)器首先利用Class.forName方法加載數(shù)據(jù)庫驅(qū)動類sun.jdbc.odbc.JdbcOdbcDriver;然后通過方法DriverManager.getConnection連接數(shù)據(jù)庫存;最后根據(jù)用戶號碼,將其狀態(tài)
42、字段設(shè)為0,IP地址字段設(shè)為空。 2.3.4客戶端的設(shè)計 客戶通過Socket與服務(wù)器建立連接。服務(wù)器與客戶都通過構(gòu)造BufferedReader、PrintWriter來建立輸入/輸出流,雙方通過該輸入/輸出流來相互傳遞信息。一旦收到客戶方的連接請求,服務(wù)器利用accept()函數(shù)返回一個新建的Socket對象,隨后客戶端向服務(wù)器發(fā)送消息,諸如注冊、登錄和查找好友等請求,服務(wù)器收到請求后,針對不同的消息處理請求。在這一過程中,服務(wù)器端與客戶端采用UDP協(xié)議通信。雖然UDP協(xié)議不可靠,但對于聊天工具而言,其可靠性并不太重要。 1.用戶注冊 當服務(wù)器收到用戶的注冊請求后,開始接收客戶傳遞
43、的消息,諸如客戶的昵稱、性別、籍貫、頭像和個人資料等信息。接收完畢后,服務(wù)器便通過JdbcOdbc與后臺數(shù)據(jù)庫連接,向數(shù)據(jù)庫添加記錄。 若新用戶注冊,則向客戶返回號碼,并在數(shù)據(jù)庫中注冊用戶的IP地址,設(shè)定Status值告知用戶在線。客戶收到服務(wù)器返回的消息后,打開主程序窗口,同時創(chuàng)建UDP以便在用戶之間建立聯(lián)系。注冊通信過程如圖3.5所示: Socket 接收完畢 發(fā)送:“new” 發(fā)送完畢 接收:注冊信息 接收:“new” 監(jiān)聽用戶請求 發(fā)送:注冊信息 ServeSocket 接收:賬號 輸出:賬號 打開登錄界面
44、 結(jié)束 數(shù)據(jù)庫 操作 客戶端正 服務(wù)器端 圖3.5 注冊流程 2.用戶登錄 用戶在客戶端程序中輸入用戶號碼與密碼,與服務(wù)器建立連接,向服務(wù)器發(fā)送登錄請求。服務(wù)器收到該請求后,通過JdbcOdbc讀取數(shù)據(jù)庫,與用戶輸入的消息做比較:若用戶輸入的信息與數(shù)據(jù)庫信息相同,則服務(wù)器向客戶返回成功消息,將其Status字段設(shè)為1,并注冊用戶當前的IP地址;否則服務(wù)器向客戶返回失敗消息??蛻舳耸盏椒?wù)器的成功確認后,打開聊天主窗口;否則彈出失敗信息??蛻舳耸录?qū)動與服務(wù)器端的事件監(jiān)聽相對應(yīng)。 3.服務(wù)器連接 服務(wù)器連接是在ConnectServer()函數(shù)中實現(xiàn)
45、的。本函數(shù)用到了具有連接性、有序性特點的流,根據(jù)服務(wù)器的IP地址和端口來完成客戶端與服務(wù)器的連接。IP地址是網(wǎng)絡(luò)中唯一地址的標識。服務(wù)器連接過程分服務(wù)器端與客戶端兩部分,執(zhí)行流程如下: (1)服務(wù)器程序流程 l 程序初始化; l 填寫本機地址信息; l 綁定并監(jiān)聽一個固定的端口; l 收到Client的連接后建立一個Socket連接; l 產(chǎn)生一個新的進程與Client進行通信和信息處理; l 子通信結(jié)束后中斷與Client的連接。 (2)客戶端程序流程: l 程序初始化; l 填寫服務(wù)器地址消息; l 連接服務(wù)器; l 與服務(wù)器通信和信息處理; l 通信結(jié)束后斷開連
46、接。 4.主程序設(shè)計 用戶完成登錄后, 客戶端與服務(wù)器端建立連接。連接建立成功后,客戶向服務(wù)器請求讀取好友名單;服務(wù)器收到該請求,開始讀取數(shù)據(jù)庫中的friend表并得到好友的號碼,再通過jcq表讀取好友資料,向客戶端發(fā)送這些信息;客戶收到服務(wù)器消息后,在主窗口顯示好友。客戶端還建立矢量來存儲好友的昵稱、號碼,頭像編號和IP地址等信息。 5.好友管理 (1)查找好友 好友查找可利用FindFriend2 類完成,F(xiàn)indFriend2類繼承自JFrame類。FindFriend2中定義的界面控件包括:好友的昵稱、性別、住址、Jicq號碼、IP地址、在線狀態(tài)、頭像、電子郵件和個人留言等信
47、息。 查找好友所需的網(wǎng)絡(luò)變量定義如下: Socket socket: 連接socket BufferedReader in;讀入緩沖區(qū) PrintWriter out;輸入緩沖區(qū) int myid;用戶的號碼 String serverhost:發(fā)送端的主機地址 int servport:服務(wù)端的主機地址 DatagramPacket sendPacket:存儲發(fā)送信息的發(fā)送數(shù)據(jù)報 DatagramSocket sendSocket:存儲接收信息的接收數(shù)據(jù)報 int sendPort:發(fā)送的端口號 (2)添加好友 用戶添加好友是聊天工具的基本功能之一。添加好友的基本步驟
48、如下: 用戶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ù)器的確認消息,可決定是否添加用戶A為好友。 (3)刪除好友 用戶可以刪除好友列表中指定的好友,客戶端確認用戶操作后向服務(wù)器發(fā)送刪除請求,服務(wù)器收到該請求,連接數(shù)據(jù)庫表friend并刪除用戶及該好友的記錄。若刪除成功,則向客戶端返回成功消息,通知用戶。 2.3.
49、5消息通信的設(shè)計 消息的發(fā)送主要是通過數(shù)據(jù)報服務(wù)來實現(xiàn)的。JAVA實現(xiàn)數(shù)據(jù)報通信的過程除面向連接的Socket外,還有無連接的數(shù)據(jù)報Socket。數(shù)據(jù)報是網(wǎng)絡(luò)層數(shù)據(jù)單元在介質(zhì)上傳輸信息的邏輯分組格式,它是是一種在網(wǎng)絡(luò)中傳播的、獨立的自身包含地址信息的消息,它能否到過目的地,到過的時間,到過內(nèi)容是否變化是不能準確知道的。數(shù)據(jù)報的通信雙方不需要建立連接,對于像聊天通信這些不需要很高質(zhì)量的應(yīng)用程序來說,數(shù)據(jù)報通信是一個非常好的選擇。 1、使用數(shù)據(jù)報 在java的包中有兩個類DatagramSocket和DatagramPacket,它們?yōu)閼?yīng)用程序采用數(shù)據(jù)報通信方式進行網(wǎng)絡(luò)通信提供了支持。其定義
50、定義如下: DatagramPacket sendPacket,receivePacket; DatagramSocket sendSocket,receiveSocket; int udpPORT=5001; int sendPort=5000; sendSocket=new DatagramSocket(); receiveSocket=new DatagramSocket(udpPORT); 2、發(fā)送消息 用戶通過好友列表中好友的IP地址,利用UDP協(xié)議與其他用戶進行信息交流。消息發(fā)送之前先創(chuàng)建一個數(shù)據(jù)報文包,用來實現(xiàn)無連接的包傳送服務(wù)。每個數(shù)據(jù)報文包是用Datagra
51、mPacket類來創(chuàng)建的,DatagramPacket對象封裝了數(shù)據(jù)報包數(shù)據(jù)、包長度、目標地址和目標端口。若客戶端發(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對象中有se
52、nd方法實現(xiàn)的,它需要以DatagramPacket對象為參數(shù),將剛才封裝進DatagramPacket對象中的數(shù)據(jù)組成數(shù)據(jù)報發(fā)出。 發(fā)送數(shù)據(jù)報文包的部分代碼如下: sendPacket=newDatagramPacket(data,data.length,InetAddress.getByName(theip.trim()),sendPort); sendSocket.send(sendPacket);} /*data為數(shù)據(jù)報文包,data.length為數(shù)據(jù)報文包的長度InetAddress.getByName(theip.trim()為獲取接收者的IP地址; sendPort為
53、數(shù)據(jù)報文包接收者的接收端口。*/ 發(fā)送消息流程如下圖所示: 從輸入消息對話框讀取信息 獲取好友的IP地址 在線不? 發(fā)送消息 結(jié)束 是 否 保存聊天記錄 圖3.6 發(fā)送消息 3.監(jiān)聽好友的消息 為了監(jiān)聽好友的消息,系統(tǒng)首先定義一個數(shù)組,該數(shù)組用于接收用戶消息中的數(shù)據(jù);然后創(chuàng)建數(shù)據(jù)報,使用receiveSocket.recerive(receivePacket)函數(shù)等待并接收數(shù)據(jù)報,取得數(shù)據(jù)報中的數(shù)據(jù)。 接收數(shù)據(jù)報文包的部分代碼如下: receivePacket=new DatagramPacket(array,array.
54、length); receiveSocket.receive(receivePacket); byte[] data=receivePacket.getData(); String infofromip= receivePacket.getAddress().getHostAddress(). toString().trim(); received=new String(data,0,data.length); /*其中receivePacket用來接收其它客戶端發(fā)送過來的數(shù)據(jù)報文包;data用來儲存數(shù)據(jù)報文包的數(shù)據(jù);infofromip用來獲取數(shù)據(jù)報文包的發(fā)送地址;receive
55、d用于儲存二進制類型數(shù)據(jù)轉(zhuǎn)換為字符串類型后數(shù)據(jù)。*/ 監(jiān)聽好友消息的流程如圖3.7所示: 接收數(shù)據(jù)報信息 addnewfriend system oneaddyou offline oneline 好友上線 好友下線 添加好友應(yīng)答 添加好友應(yīng)答 接收系統(tǒng)消息 Yes No Yes Yes Yes Yes No No No 查找對應(yīng)好友及其登記IP IP存在 接收好友消息 接收陌生人消息 else 圖3.7
56、監(jiān)聽好友消息 (1)當接收好友消息時,主程序彈出一個對話框,由用戶自行選擇接收信息與否,用戶可根據(jù)消息提示,打開相應(yīng)好友的接收消息對話框來接收消息。 l DatagramPacket類提供了4個函數(shù)來獲得消息: l Public bye[] getDate(): 返回一個字節(jié)數(shù)組,包含收到或要發(fā)送的數(shù)據(jù)報中的數(shù)據(jù); l Public int getLength(): 返回發(fā)送或收到的數(shù)據(jù)的長度; l Public InetAddress getAddress(); 返回一個發(fā)送或接收此數(shù)據(jù)報報文的機器的IP地址; l Public int getPort(): 返回發(fā)送或接收數(shù)據(jù)報的遠程主機的端口號。 接收消息的流程圖3.8所示: 監(jiān)聽到好友發(fā)送過來的消息 打開接收消息對話框,接收消息。 接收不? 保存聊天記錄 結(jié)束 是 否 圖3.8 接收消息 (2)上線和隱身 當用戶想處于非聊天狀態(tài)的時候,可以切換至隱身狀態(tài)。這時候,用戶的客戶端會查找所有在線的好友,并發(fā)制作數(shù)據(jù)包,發(fā)送“隱身”要求給所有好友的客戶端。在好友的程序界面上,用戶的頭像由彩色變成黑白。此時,所有好友都無法發(fā)送消息給此用戶。當用戶想點擊程序界面的“上線”按鈕時,既可通知所有的好友此用戶上線了。
- 溫馨提示:
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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 市教育局冬季運動會安全工作預(yù)案
- 2024年秋季《思想道德與法治》大作業(yè)及答案3套試卷
- 2024年教師年度考核表個人工作總結(jié)(可編輯)
- 2024年xx村兩委涉案資金退還保證書
- 2024年憲法宣傳周活動總結(jié)+在機關(guān)“弘揚憲法精神推動發(fā)改工作高質(zhì)量發(fā)展”專題宣講報告會上的講話
- 2024年XX村合作社年報總結(jié)
- 2024-2025年秋季第一學(xué)期初中歷史上冊教研組工作總結(jié)
- 2024年小學(xué)高級教師年終工作總結(jié)匯報
- 2024-2025年秋季第一學(xué)期初中物理上冊教研組工作總結(jié)
- 2024年xx鎮(zhèn)交通年度總結(jié)
- 2024-2025年秋季第一學(xué)期小學(xué)語文教師工作總結(jié)
- 2024年XX村陳規(guī)陋習(xí)整治報告
- 2025年學(xué)校元旦迎新盛典活動策劃方案
- 2024年學(xué)校周邊安全隱患自查報告
- 2024年XX鎮(zhèn)農(nóng)村規(guī)劃管控述職報告