




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、 PAGE39 / NUMPAGES43 中文摘要當前是信息網絡得到飛速發展的時代,尤其是計算機和通信技術的發展和結合,深深的影響著我們的生活、學習和工作方式。其中,網絡聊天工具成為人們日常交流的一種重要工具,它成本低,通信速度快,方便信息交流和資料的傳遞。目前應用比較廣泛的聊天工具有騰訊 、Net meeting、MSN等,這些軟件簡單易用,深受大眾喜歡。在論文中,首先論述了系統的開發背景,并對所用到的開發工具與關鍵技術做了簡單的介紹。接著對系統的研究意義,研究現狀與設計目標進行分析,通過對系統需求和可行性進行分析,確定了系統的功能模塊,并畫出相應的功能結構圖、模塊圖。其次按系統總體設計的結
2、果,對系統進行結構設計。本次開發的網絡聊天系統是基于開放的Java應用程序設計的,能動態、實時地完成信息的傳遞,且具有高效的交互性,能更有效地處理客戶請求,易于維護和更新。系統采用客戶機/服務器的架構模式,由客戶端程序和服務器程序外加服務器端用于存放客戶數據的數據庫組成,使用Java提供的Socket類以與Java的多線程功能,在不同的端口上部署各類服務,可以在單個程序中同時運行多個不同進程,而客戶端通過Socket發送信息給服務器,從而實現多點對多點的聊天。關鍵詞:Java,交互性,Socket類,多線程ABSTRACTThe rapid development of the informa
3、tion networks, especially the development and integration of computer and communication technologies, has deeply affected our lives, learning and work. Among them, the Internet chat tool becomes an important tool for daily communication, because of its low cost, fast communication and facilitate inf
4、ormation exchange and data transmission. Currently used widely in the chat tool are Tencent , Net meeting, MSN, etc.In the paper, firstly I discuss the background of the development of the system and simply introduce the development tools and key technologies used. Secondly I analyze the research an
5、d design objectives to the significance of the system. Through the system requirements and feasibility analysis, I determine the functional modules of the system and draw the corresponding function block diagram, block diagram. Then according to the results of the overall system design, I design the
6、 structural of the system.The development of the Internet chat system is designed based on open Java application. It can be dynamic, real-time information transfer and efficient interaction so that it can deal more effectively with customer requests, easy to maintain and update. The system will use
7、the client / server architecture model, which includes the client program and server programs plus server-side database used to store customer data. By using the socket class provided by java and java multi-threading capability,we can deploy various services on a different port and a number of diffe
8、rent processes can be run simultaneously in a single program. Clients send information to the server through the socket in order to achieve multi-point-to-multipoint chat.Key words: Java, interactivity, the Socket class, multi-threaded目錄TOC o 1-3 h z uHYPERLINK l _Toc321985021第1章緒論 PAGEREF _Toc32198
9、5021 h 1HYPERLINK l _Toc3219850221.1課題背景 PAGEREF _Toc321985022 h 1HYPERLINK l _Toc3219850261.2 開發技術 PAGEREF _Toc321985026 h 1HYPERLINK l _Toc3219850271.2.1 Java PAGEREF _Toc321985027 h 1HYPERLINK l _Toc3219850281.2.2 TCP/IP PAGEREF _Toc321985028 h 3HYPERLINK l _Toc3219850291.2.3 Socket PAGEREF _Toc3
10、21985029 h 4HYPERLINK l _Toc3219850301.3開發工具 PAGEREF _Toc321985030 h 5HYPERLINK l _Toc3219850311.3.1 Eclipse PAGEREF _Toc321985031 h 5HYPERLINK l _Toc3219850321.3.2 StarUML PAGEREF _Toc321985032 h 6HYPERLINK l _Toc321985033第2章系統需求分析 PAGEREF _Toc321985033 h 7HYPERLINK l _Toc3219850342.1 基本功能需求 PAGERE
11、F _Toc321985034 h 7HYPERLINK l _Toc3219850352.2 性能需求 PAGEREF _Toc321985035 h 7HYPERLINK l _Toc3219850362.3 界面需求 PAGEREF _Toc321985036 h 7HYPERLINK l _Toc321985037第3章系統設計 PAGEREF _Toc321985037 h 8HYPERLINK l _Toc3219850383.1 系統功能設計 PAGEREF _Toc321985038 h 8HYPERLINK l _Toc3219850393.2 系統總體設計 PAGEREF
12、_Toc321985039 h 9HYPERLINK l _Toc3219850403.2.1 系統方案設計 PAGEREF _Toc321985040 h 9HYPERLINK l _Toc3219850413.2.2 系統功能模塊圖 PAGEREF _Toc321985041 h 9HYPERLINK l _Toc3219850423.2.3 系統類圖 PAGEREF _Toc321985042 h 10HYPERLINK l _Toc3219850433.2.4 系統用例圖 PAGEREF _Toc321985043 h 11HYPERLINK l _Toc3219850443.2.5
13、時序圖 PAGEREF _Toc321985044 h 12HYPERLINK l _Toc3219850453.2.4活動圖 PAGEREF _Toc321985045 h 12HYPERLINK l _Toc321985046第4章系統實現 PAGEREF _Toc321985046 h 17HYPERLINK l _Toc3219850474.1 數據庫連接實現 PAGEREF _Toc321985047 h 17HYPERLINK l _Toc3219850484.2 登錄、注冊功能實現 PAGEREF _Toc321985048 h 18HYPERLINK l _Toc3219850
14、494.3 聊天功能實現 PAGEREF _Toc321985049 h 20HYPERLINK l _Toc3219850504.4 好友管理功能實現 PAGEREF _Toc321985050 h 25HYPERLINK l _Toc3219850514.5 資源共享功能實現 PAGEREF _Toc321985051 h 30HYPERLINK l _Toc321985052總結 PAGEREF _Toc321985052 h 34HYPERLINK l _Toc321985053參考文獻 PAGEREF _Toc321985053 h 35HYPERLINK l _Toc3219850
15、54致 PAGEREF _Toc321985054 h 36第1章緒論1.1課題背景現在互聯網越來越發達,網絡聊天工具成為人們日常交流的一種重要工具,它成本低,通信速度快,方便信息交流和資料的傳遞,所以開發一個界面友好、易于操作的聊天工具能較好地解決的單線程通信以與費用高昂等問題。隨著網絡普與程度的提高,人們對于通信軟件的要求越來越趨于簡單操作,同步實時,以與更簡單的網絡傳輸。本次開發的網絡聊天系統是基于開放的Java應用程序設計的,能動態、實時地完成信息的傳遞,且具有高效的交互性,能更有效地處理客戶請求,易于維護和更新。系統分為兩部分:客戶端和服務器端。客戶端主要實現新建用戶、用戶登錄、好友
16、管理和消息的收發功能以與群聊功能,客戶端申請與服務器端建立連接,當客戶端與服務器端建立連接通道后就可以像服務器端發送新建用戶信息和登錄信息,以與好友管理、信息編輯、發送和接收的功能;服務器端主要完成建立連接、數據庫操作和監聽客戶三大功能,服務器端建立一個Server Socket的連接,不斷偵聽客戶端是否建立連接或斷開連接,如果有客戶端申請連接就啟動線程與客戶端建立連接并按照客戶端的請求對數據庫進行操作并把結果返回給客戶端。1.2 開發技術1.2.1 JavaJava是一個由Sun公司開發的新一代高級編程語言。它可在各式各樣不同機器、不同操作平臺的網絡環境中開發軟件。不論你使用的是哪種WEB瀏
17、覽器,哪種計算機,哪種操作系統,只要WEB瀏覽器上面注明了“支持Java”,并且裝有JAVA控件,你就可以看到生動的主頁。Java正在逐步成為Internet應用中最主要的開發語言,它徹底改變了軟件開發模式,帶來了自PC機以來又一次革命,為飛速發展的網絡世界增添了新的動力。(一)JAVA的主要特點Java語言有下面一些特點:簡單、面向對象、分布式、解釋執行、 安全、體系結構中立、可移植、高性能、多線程以與動態性。1.簡單Java語言是一種面向對象的語言,它通過提供最基本的方法來完成指定的任務。Java略去了運算符重載、多重繼承等模糊的概念,且通過實現自動垃圾收集大大簡化了程序設計者的存管理工作
18、。2.面向對象Java語言的設計集中于對象與其接口,它提供了簡單的類機制以與動態的接口模型,實現了模塊化和信息隱藏;而類則提供了一類對象的原型,并且通過繼承機制,子類可以使用父類所提供的方法,實現了代碼的復用。3.分布性Java是面向網絡的語言。通過它提供的類庫可以處理TCP/IP協議,用戶可以通過URL地址在網絡上很方便地訪問其它對象。4.安全性用于網絡、分布環境下的Java必須要防止病毒的入侵。Java不支持指針, 一切對存的訪問都必須通過對象的實例變量來實現,這樣就防止程序員使用 “特洛伊”木馬等欺騙手段訪問對象的私有成員,同時也避免了指針操作中容易產生的錯誤。5.體系結構中立Java解
19、釋器生成與體系結構無關的指令,Java程序可在任意的處理器上運行。這些指令對應于Java虛擬機中的表示,Java解釋器得到字節碼后,對它進行轉換,使之能夠在不同的平臺運行。6.可移植性與平臺無關的特性使Java程序可以方便地被移植到網絡的不同機器上。另外,Java編譯器是由Java語言實現的,Java運行時系統由標準C實現,這使得Java 系統本身也具有可移植性。7.解釋執行Java解釋器直接對Java字節碼進行解釋執行。字節碼本身攜帶了許多編譯時信息,使得連接過程更加簡單。8.高性能和其它解釋執行的語言如BASIC不同,Java字節碼的設計使之能很容易地直接轉換成對應于特定CPU的機器碼,從
20、而得到較高的性能。9.多線程多線程機制使應用程序能夠并行執行,而且同步機制保證了對共享數據的正確操作。通過使用多線程,程序設計者可以分別用不同的線程完成特定的行為,而不需要采用全局的事件循環機制,這樣就很容易地實現網絡上的實時交互行為。10.動態性Java的設計使它適合于一個不斷發展的環境。在類庫中可以自由地加入 新的方法和實例變量而不會影響用戶程序的執行。并且Java通過接口來支持多重繼承,使之比嚴格的類繼承具有更靈活的方式和擴展性。(二)豐富的類庫Java提供了大量的類以滿足網絡化、多線程、面向對象系統的需要。1.語言包提供的支持包括字符串處理、多線程處理、例外處理、數學函數處理等,可以用
21、它簡單地實現Java程序的運行平臺。2.實用程序包提供的支持包括哈希表、堆棧、可變數組、時間和日期等。3.輸入輸出包用統一的流模型來實現所有格式的I/O,包括文件系統、 網絡、輸入4.低級網絡包用于實現Socket編程。5.抽象圖形用戶接口包實現了不同平臺的計算機的圖形用戶接口部件, 包括窗口、菜單、滾動條、對話框等,使得Java可以移植到不同平臺的機器。6.網絡包支持Internet的TCP/IP協議,提供了與Internet的接口。它支持URL連接,WEB即時訪問,并且簡化了C/S模型的程序設計。1.2.2 TCP/IP (1) TCP/IP協議的特點:TCP/IP(Transmissio
22、n Control Protocol/Internet Protocol)是傳輸控制協議/網際協議的縮寫, TCP/IP是當今網絡互聯的核心協議。TCP/IP協議的體系結構共有四個層次,即應用層、傳輸層、網絡互聯層和網絡接口層。IP協議的作用:第一,它是網絡層的協議,提供互聯網上數據傳輸的統一格式。第二,提供不可靠的無連接的服務。第三,定義了互聯網上的傳輸數據的基本單元,提供了供路由選擇的信息,沒有差錯校驗和處理的機制。TCP/IP協議具有以下特點:協議標準具有開放性,其獨立于特定的計算機硬件與操作系統,可以免費使用。統一分配網絡地址,使得每個TCP/IP 設備在網絡中都具有唯一的IP地址。實
23、現了高層協議的標準化,能為用戶提供多種可靠的服務。(2)TCP/IP協議進行傳輸數據傳輸的過程:應用程序為了傳輸數據會調用TCP,將數據和對應的參數傳給TCP,將TCP 數據包封裝在IP包,通過網絡送給目的TCP。接收方TCP在接收到數據后通知上層應用程序,TCP將保證接收數據的正確性。TCP調用IP接口,向TCP提供所有TCP需要的服務。(3)端口號:有的時候,一個IP地址不能完整的標識一臺服務器,這是應為一臺物理性的計算機同時運行著多個應用程序,這就需要我們來區別同一臺機子上的不同的服務,所以就在傳輸層和應用層上設置接口,就是端口。端口實際是一個16位長的 地址,他的圍是065535之間,
24、其中01023是熟知端口,主要是給提供服務的應用程序使用,這些端口是所有應用進程都只道的,102465535為一般端口,也稱動態端口、連接端口,用來隨時分配要求通信的客戶端應用程序。在數據傳輸過程中,各種服務器不斷的檢測分配給他的端口,一邊發現要求和他通信的客戶端。1.2.3 SocketSocket,簡稱套接字,用于實現網絡上客戶和服務器之間的連接。也就是說網絡上兩個或兩個以上雙工方式通信的進程之間總有一個連接,這個連接的端點成為套接字,套接字是在比較低的層次上通信的。具體的說:一個服務器應用程序一般偵聽一個特定的端口等待客戶端的連接請求,當一個連接請求到達時,客戶端和服武器端建立一個通信連
25、接,在連接過程中,客戶端被分配一個本地端口與一個Socket建立連接,客戶端通過寫Socket來通知服務器,以讀Socket中的信息,類似的服務器也獲得一個本地端口,它需要一個新的端口號來偵聽原始端口上的其他連接請求。服務器也通過它的本地端口連接一個socket,通過讀寫和客戶端通信。Socket程序的工作過程:1、建立Socket連接:在通信開始之前由通信雙方確認身份,建立一條專用的虛擬連接通道。2、數據通信:利用虛擬連接通道傳送數據信息進行通道。3、關閉:通信結束時,再將所建的虛擬連接拆除。具體如下1服務器socket2監聽4接收5讀6寫7關閉3客戶端etsocket6 寫5 讀7關閉圖1
26、.1 Socket套接字原理圖1.3開發工具1.3.1 Eclipse集成開發環境(Integrated Development,簡稱IDE)軟件是用于程序開發環境的應用程序,一般包括代碼編輯器、編譯器、調試器和圖形用戶界面工具。就是集成了代碼編寫功能、分析功能、編譯功能、debug功能等一體化的開發軟件套。所有具備這一特性的軟件或者軟件套(組)都可以叫做IDE。Eclipse只是一個框架軟件,本身不能開發程序,但它可以安裝各種插件。正是運行在Eclipse平臺上的種種插件,提供了程序開發的各種功能。同時各個領域的開發人員通過開發插件,可以構建與Eclipse環境無縫集成的工具。Eclipse
27、是一個非常成功的開源項目,相對比Borland公司的王牌uilder來說,擁有綠色軟件、免費、插件多、功能強大等優點,相對于現階段的開發來說,使用Eclipse作為開發工具是最好的選擇。Eclipse是綠色軟件,其下載與安裝非常簡單,但是如果需要使用Eclipse來開發J2EE,為了提高開發的效率,可以下載MyEcilpse插件或者Lomboz插件,其中Myeclipse是收費軟件,可以直接下載exe進行安裝,而Lomboz是開源插件,其使用是完全免費的。1.3.2 StarUMLStarUML是一個開源的UML建模工具,它遵守GNU GPL開源條約,StarUML項目宣稱的目標是代替大型的商
28、業UML工具軟件,如 HYPERLINK ://w/index.php?title=IBM&variant=zh-cn o IBM IBM的 HYPERLINK ://w/index.php?title=Rational_Rose&action=edit&redlink=1 o Rational Rose (頁面未存在) Rational Rose, HYPERLINK ://w/index.php?title=Borland&variant=zh-cn o Borland Borland公司的 H
29、YPERLINK ://w/index.php?title=Borland_Together&action=edit&redlink=1 o Borland Together (頁面未存在) Together。它具有如下一些特點:可繪制多種UML圖:用例圖、類圖、時序圖、狀態圖、活動圖等。完全免費:StarUML是一套開放源碼的軟件,不僅免費自由下載,連代碼都免費開放。可導出多種格式圖片:JPG、JPEG、BMP等格式的圖片文件。正反向工程:StarUML可以依據類圖的容生成Java、C+、C#代碼,也能夠讀取Java、C+、C#代碼反向生成類圖。反向工程有兩個
30、主要用途,其一是舊有的源碼反轉成圖之后,可以構建UML模型的方式繼續將新的設計添加上去;另一項用途是想要解析源碼時,可以通過反轉的類圖來理解,不再需要查看一行又一行的代碼,這將節省大量的時間和精力。導入Rose文件:StarUML可以讀取Rational Rose生成的文件,讓原先Rose的用戶可以轉而使用免費的StarUML。第2章 系統需求分析2.1 基本功能需求1)聊天私聊:私聊就是兩個之間聊天,即一對一。群聊:就是多人一起聊天,即一對多。2)好友管理查找好友:根據好友IP查找好友信息添加好友:根據查找到的好友信息,將其添加為自己的好友。刪除好友:在好友列表中將好友刪除。備注:對好友進行
31、備注,方便自己記憶。3)資源共享設置共享資源路徑,添加共享文件或目錄,啟動文件共享。2.2 性能需求支持網絡通信,實現全方位、多功能的信息通信功能。盡量減少服務器的開銷與數據傳送負擔,提高數據利用效率和數據傳送效率,避免無效數據的傳輸。2.3 界面需求界面設計美觀,人機交互界面友好,聊天對話框線程支持,實現無限制數量用戶聊天,服務器端無特殊要求。本應用程序需要有4個窗口來展示用戶需要的信息和列表,分別是系統主窗口、用戶列表窗口、通信窗口和系統設置窗口。根據已有的需求信息和功能分析,設計的系統主窗口具有用戶基本信息、當前時間、好友列表等顯示功能。其中,好友列表初始顯示在主窗口中。通信窗口包括對方
32、用戶名、對方形象、對方主機信息和IP信息。系統設置窗口主要包括設置共享資源的路徑以與系統升級路徑(暫未實現)、系統公告路徑(暫未實現)等。第3章 系統設計3.1 系統功能設計1)用戶注冊服務器收到用戶的注冊請求,便開始接受客戶傳遞的信息,諸如客戶的昵稱,密碼,性別,頭像,個人資料等,接受完畢后,便通過后臺數據庫連接,然后向數據庫添加記錄。客戶收到服務器返回的信息后,便打開主登陸窗口。2)登陸在客戶端,用戶輸入其用戶名和密碼,然后建立與服務器的連接,告訴服務器我要登錄,服務器收到后,開始讀取數據庫,然后與用戶輸入的信息比較,如果成功,便打開主程序窗口。然后客戶向服務器請求讀取好友,服務器收到該請
33、求,開始讀取數據庫中的表,通過讀取好友資料,然后向客戶端發送這些信息,客戶收到后就在主窗口顯示好友,并且建立幾個矢量(Vector)用以存儲好友的呢稱,IP號。3)私聊私聊就是兩個聊天。客戶端首先發送消息到服務器端,服務器端根據發送人信息和接收者信息來轉發。4)群聊群聊,就是多人一起聊天。過程與私聊差不多。唯一的不同就是服務器會將信息轉發給指定的一到多個成員。7)查找、添加、刪除好友以與備注輸入要查找的用戶IP號,客戶端發送一個查詢信息給服務器端,如果找到就返回用戶服務信息。打開一個用戶信息顯示界面,點擊 “添加為好友”菜單項后可將此人加為好友。如果未找到,彈出一個信息提示框。在好友列表中打開
34、用戶信息顯示界面, 點擊“刪除該好友”菜單項后可將此人刪除,若點擊“備注”則可以對好友進行備注,分別記憶以與管理。9)資源共享在共享功能之前,要設置好共享資源路徑,如果設置不好,好友將無法看到這些共享的文件或網絡資源。還有一個重要的步驟就是添加共享文件或目錄。最后啟動資源共享。3.2 系統總體設計3.2.1 系統方案設計圖3.1 系統方案設計圖3.2.2 系統功能模塊圖本系統主要由由三個子系統組成:1)聊天子系統;2)好友管理子系統;3)資源共享子系統。聊天系統的功能主要有:1)私聊;2)群聊。好友管理系統的功能有:1)查找好友;2)添加好友;3)刪除好友;4)備注。資源共享系統的功能主要是訪
35、問好友的共享資源。示意圖如下:圖 3.2 系統功能模塊圖3.2.3 系統類圖圖3.3 系統類圖Socket:非自定義類,.Socket。Thread: 非自定義類,java.util.Thread。Client:負責具體發送和接收數據。FromServerListen:監聽服務器是否在發送數據。MainFrame系統的主界面(包括用戶列表等)。 UserInfo包括用戶的好友列表信息等。 UserClass包括用戶的個人信息,如IP、用戶名等。3.2.4 系統用例圖圖3.4 系統用例圖本圖說明:用戶注冊、登錄后,可以操作以下三個功能模塊:即聊天功能,好友管理功能以與資源共享功能。其中,聊天功能
36、又分為私聊和群聊;好友管理分為查找好友、添加好友、刪除好友以與備注好友;資源共享主要是用戶可以分為好友的共享資源。3.2.5 時序圖客戶登錄、注冊時的服務器端時序圖圖3.5 登錄、注冊時序圖本圖說明:服務器接每次與一個客戶連接以后,就會去創建一個監聽線程。通過線程來接收客戶端發送的所有數據。如果要查詢數據庫,監聽線程會請求獲得一個數據庫連接.如果數據庫連接已經獲得,就把連接交給DBOperation對象,通過此對象可以返回給監聽線程必要的結果。最后監聽線程會通過Socket將結果返回給客戶端。3.2.4活動圖1)用戶登錄活動圖圖3.6 用戶登錄活動圖本圖說明:首先用戶在客戶端填寫登錄信息,提交
37、以后服務器會對用戶名和密碼進行驗證。如果不正確,返回一個提示信息。如果登錄成功,就更新好友列表登錄到主窗口頁面。2)客戶之間的通信活動圖圖3.7 客戶端通信活動圖本圖說明:用戶編寫信息后,點擊將消息發送以后,服務器端對應的監聽線程會接收到一個數據包。此包中包含接收者的信息,如果接收者開啟了My ,數據包將會轉發到接收者。否則就寫入數據庫,等接收者開啟My 之后再將信息發送給對應的接收者。3)訪問共享資源活動圖圖3.8 訪問共享資源活動圖本圖說明:客戶端通過設置共享資源路徑將自己的資源共享。當需要訪問某個好友的共享資源時,服務器就會搜索好友設置好的共享資源路徑,通過路徑打開共享網絡資源。若好友設
38、置的路徑錯誤或好友并沒有設置共享資源路徑,則提示訪問錯誤信息。4)好友管理活動圖圖3.9 好友管理活動圖本圖說明:用戶根據好友IP號查找好友,如果此IP存在,就將用戶信息發送到客戶端。同時將好友關系寫入到數據庫。刪除好友時,客戶向服務器發送刪除好友請求。服務器接收到刪除好友請求以后,將好友關系從數據庫中刪除。當客戶端向服務器發送備注請求時,服務器會獲取用戶輸入的,并將其寫入數據庫中,同時更新好友列表框中的好友。第4章 系統實現4.1 數據庫連接實現訪問數據庫是一個重要的環節,也是比較程式化的部分。本系統采用Java DB數據庫,數據庫名稱為db_My 。它包含兩個表,一個是用戶信息表,另一個是
39、窗體信息表。分別如下: 表4.1 用戶信息表( user)字段名稱數據類型字段描述字段寬度ipvarchar用戶IP地址50hostvarchar用戶主機名稱50namevarchar用戶50tooltipvarchar用戶提示文本50iconvarchar用戶頭像256表4.2 窗體信息表( Message)字段名稱數據類型字段描述字段寬度xLocationintX軸坐標4yLocationintY軸坐標4widthint窗體高度4heightint窗體長度4其中數據庫的開發主要步驟是:下載驅動、構建路徑訪問數據庫的類核心代碼如下:package .my .dao;import java.a
40、wt.Rectangle;public class Dao private static final String driver = org.apache.derby.jdbc.EmbeddedDriver;private static String url = jdbc:derby:db_My ;private static Connection conn = null;private static Dao dao = null;private Dao() try Class.forName(driver);if (!dbExists() conn = DriverManager.getCo
41、nnection(url + ;create=true);createTable(); elseconn = DriverManager.getConnection(url);addDefUser(); catch (Exception e) e.printStackTrace();JOptionPane.showMessageDialog(null, 數據庫連接異常,或者本軟件已經運行。);System.exit(0);private boolean dbExists() boolean bExists = false;File dbFileDir = new File(db_My );if
42、 (dbFileDir.exists() bExists = true;return bExists;public static Dao getDao() if (dao = null)dao = new Dao();return dao;4.2 登錄、注冊功能實現1)用戶注冊服務器收到用戶的注冊請求,便開始接受客戶傳遞的信息,諸如客戶的昵稱,密碼,性別,頭像,個人資料等,接受完畢后,便通過后臺數據庫連接,然后向數據庫添加記錄。客戶收到服務器返回的信息后,便打開主登錄窗口。2)登錄在客戶端,用戶輸入其用戶名和密碼,然后建立與服務器的連接,告訴服務器我要登錄,服務器收到后,開始讀取數據庫,然后與
43、用戶輸入的信息比較,如果成功,便打開主程序窗口。然后客戶向服務器請求讀取好友,服務器收到該請求,開始讀取數據庫中的表,通過讀取好友資料,然后向客戶端發送這些信息,客戶收到后就在主窗口顯示好友,并且建立幾個矢量(Vector)用以存儲好友的呢稱,IP號。登錄頁面如下:圖4.1 登錄頁面圖注冊頁面如下:圖4.2 注冊頁面圖4.3 聊天功能實現1)私聊私聊就是兩個聊天。客戶端首先發送消息到服務器端,服務器端根據發送人信息和接收者信息來轉發。2)群聊群聊,就是多人一起聊天。過程與私聊差不多。唯一的不同就是服務器會將信息轉發給指定的一到多個成員。消息發送以后,服務器端對應的監聽線程會接收到一個數據包。此
44、包中包含接收者的信息,如果接收者開啟了My ,數據包將會轉發到接收者。否則就寫入數據庫。聊天主窗口如下:圖4.3 聊天主窗口圖私聊頁面如下:圖4.4 私聊頁面圖私聊功能實現的核心代碼如下:this.user = user;this.message = message;this.frame = frame;this.sendButton = frame.getSendButton();publicvoid run() try sendButton.setEnabled(false);Process process = Runtime.getRuntime().exec(net send + us
45、er.getIp() + + message);InputStream is = process.getInputStream();int i, j;StringBuilder sb = new StringBuilder();while (i = is.read() != -1) sb.append(char) i);String runIs = new String(sb.toString().getBytes(iso-8859-1).trim().replace(user.getIp(),user.getName();InputStream eis = process.getErrorS
46、tream();StringBuilder esb = new StringBuilder();while (j = eis.read() != -1) esb.append(char) j);String runEis = new String(esb.toString().getBytes(iso-8859-1).trim().replace(user.getIp(),user.getName();frame.appendReceiveText(runIs, new Color(187, 30, 193);if (runEis.length() 0)frame.appendReceiveT
47、ext(runIs, Color.RED);sendButton.setEnabled(true); catch (IOException e) e.printStackTrace();首先,先定義線程類,聲明變量和構造方法。通過重寫run方法來執行信息發送命令。根據對方的IP將指定信息傳給對方。群聊頁面如下:圖4.5 群聊頁面圖群聊功能實現的核心代碼如下:publicstaticvoid sendGroupMessenger(final TreePath selectionPaths,final String message) new Thread(new Runnable() int bu
48、fferSize = 512;publicvoid run() MessageFrame messageFrame = new MessageFrame();try for (TreePath path : selectionPaths) DefaultMutableTreeNode node = (DefaultMutableTreeNode) path.getLastPathComponent();User user = (User) node.getUserObject();messageFrame.setStateBarInfo(正在給+ user.getName()+ 發送消息);T
49、hread.sleep(20);InetAddress addr = InetAddress.getByName(user.getIp();if (!addr.getHostAddress().equals(addr.getHostName() Process process = Runtime.getRuntime().exec(net send + user.getIp() + + message);InputStream is = process.getInputStream();int i;String sb = null;byte data = newbytebufferSize;i
50、f (i = is.read(data) != -1) sb = new String(data, 0, i);String runIs = sb;runIs = runIs.replace(user.getIp(), user.getName().trim();process.destroy();if (runIs.indexOf(出錯) 0)messageFrame.addMessage(runIs, true);elsemessageFrame.addMessage(runIs, false); else messageFrame.addMessage(錯誤: + user.getNam
51、e()+ 可能沒有運行My 或啟動了防火墻, false); catch (InterruptedException e) e.printStackTrace(); catch (IOException e) e.printStackTrace();messageFrame.setStateBarInfo(消息發送完畢,可以關閉窗口。);messageFrame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);).start();根據用戶選擇的群發好友,在sendGroupMessenger方法中,遍歷選擇用戶來發送群發信息
52、,并獲取發送結果,然后判定發送是否成功。如果失敗給出失敗的提示,最后提示群發完畢。4.4 好友管理功能實現查找、添加、刪除好友以與備注輸入要查找的用戶IP號,客戶端發送一個查詢信息給服務器端,如果找到就返回用戶服務信息。打開一個用戶信息顯示界面,該界面會彈出一個“添加為好友”菜單,點擊后可將此人加為好友。如果未找到,彈出一個信息提示框。在好友列表中打開用戶信息顯示界面,該界面會彈出一個“刪除該好友”菜單,點擊后可將此人刪除,若點擊“備注”則可以對好友進行備注,方便記憶以與管理。(1)查找好友頁面如下:圖4.6 查找好友頁面圖查找好友核心代碼如下:publicstaticvoid searchU
53、sers(ChatTree tree, JProgressBar progressBar,JList list, JToggleButton button) String ipStart = My .preferences.get(ipStart, );String ipEnd = My .preferences.get(ipEnd, 55);String is = ipStart.split(.);String ie = ipEnd.split(.);int ipsInt = newint4;int ipeInt = newint4;for (in
54、t i = 0; i 4; i+) ipsInti = Integer.parseInt(isi);ipeInti = Integer.parseInt(iei);progressBar.setIndeterminate(true);progressBar.setStringPainted(true);DefaultListModel model = new DefaultListModel();model.addElement(搜索結果:);list.setModel(model);try for (int l = ipsInt0; l = ipeInt0; l+) boolean b0 =
55、 l ipeInt0; / 記錄第一層循環的條件int k = l != ipsInt0 ? 0 : ipsInt1; / 從第二次循環以后k賦值0for (; b0 ? k 256 : k = ipeInt1; k+) boolean b1 = b0 | k ipeInt1; / 記錄第二層循環的條件int j = k != ipsInt1 ? 0 : ipsInt2; / 從第二次循環后j賦值0for (; b1 ? j 256 : j = ipeInt2; j+) boolean b2 = b1 | b1 ? j 256 : j ipeInt2;int i = j != ipsInt2
56、? 0 : ipsInt3;for (; b2 ? i 256 : i = ipeInt3; i+) if(!button.isSelected()progressBar.setIndeterminate(false);return;Thread.sleep(100);String ip = l + . + k + . + j + . + i;progressBar.setString(正在搜索: + ip);if (tree.addUser(ip, search)model.addElement(添加+ ip + ); catch (Exception e) e.printStackTrac
57、e();finallyprogressBar.setIndeterminate(false);progressBar.setString(搜索完畢);button.setText(搜索新用戶);button.setSelected(false);searchUsers方法主要用于搜索局域網中的計算機用戶。它首先先定義IP的搜索圍,設置組件的狀態。然后定義搜索的方法,按照循環圍和循環條件進行搜索。(2)添加好友頁面如下:圖4.7 添加好友頁面圖添加好友核心代碼如下:privateclass AddUserActionListener implements ActionListener publi
58、cvoid actionPerformed(final ActionEvent e) String ip = JOptionPane.showInputDialog(My .this, 輸入新好友IP地址);if (ip != null)chatTree.addUser(ip, add);當用戶選擇“添加好友”菜單項后,先彈出輸入對話框,提示用戶輸入新好友的IP地址,然后將好友信息添加到chatTree樹組件中。(3)刪除好友頁面如下:圖4.8 刪除好友頁面圖刪除好友核心代碼:privateclass delUserActionListener implements ActionListene
59、r publicvoid actionPerformed(final ActionEvent e) chatTree.delUser();當用戶選擇“刪除好友”菜單項后,詢問是否刪除,得到確定的答復后將好友從chatTree中刪除。(4)備注頁面如下:圖4.9 備注頁面圖備注核心代碼如下:privateclass RenameActionListener implements ActionListener publicvoid actionPerformed(final ActionEvent e) TreePath path = chatTree.getSelectionPath();if
60、(path = null)return;DefaultMutableTreeNode node = (DefaultMutableTreeNode) path.getLastPathComponent();User user = (User) node.getUserObject();String newName = showInputDialog(user.getName();if (newName != null & !newName.isEmpty() user.setName(newName);dao.updateUser(user);DefaultTreeModel model =
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 小班心理健康個案跟蹤扶持計劃
- 云計算平臺客戶信息安全保障措施
- 戶外運動冬季防寒防凍措施
- 園林綠化企業職業危害防治措施
- 中國脈沖噴吹袋式除塵器市場前景預測及投資規劃研究報告
- 2025年中國納米材料行業市場發展監測及投資潛力預測報告
- 2025年中國乙基氯化鋁行業市場發展前景及發展趨勢與投資戰略研究報告
- 2025年中國太陽能筆記本移動電源行業市場運營現狀及投資戰略報告
- 吉林省集安市第一中學2025年高一化學第二學期期末達標檢測模擬試題含解析
- 2025年中國光伏真空泵行業市場深度評估及投資策略咨詢報告
- 中遠海運招聘筆試題庫2025
- 2025至2030中國納米二氧化硅市場消費前景與投資價值綜合分析報告
- 溫州市2024-2025學年高一下學期6月期末-英語試卷及答案
- 導管室護理管理制度
- 專利代理所管理制度
- 律師所案件管理制度
- 【MOOC】園林植物應用設計-北京林業大學 中國大學慕課MOOC答案
- 勞動合同(模版)4篇
- 23秋國家開放大學《視覺設計基礎》形考任務1-5參考答案
- 國家開放大學《農村政策法規》形成性考核(平時作業)參考答案
- 涂裝廠PFMEA模版
評論
0/150
提交評論