版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、摘要隨著信息革命的到來,使用網(wǎng)絡(luò)工具進(jìn)行交流已經(jīng)成為我們平常生活里不可或缺也脫離不開的一件事,相比擬與使用 通訊和短信交流,它們過于繁瑣和昂貴,而網(wǎng)絡(luò)通信工具由于使用方便、傳遞信息的即時性,特別是眾多青少年人的追捧和使用。更加關(guān)鍵的是網(wǎng)絡(luò)工具給我們提供了一個低消費(fèi)更便于交流溝通的平臺,這個網(wǎng)絡(luò)工具平臺擁有廣泛性、即時性、便捷性,因而得到了廣闊公司、事業(yè)單位、院校和民眾的認(rèn)可,本論文表達(dá)的是一種基于利用TCP/IP協(xié)議的、利用數(shù)據(jù)流的存儲和讀取、C/S框架結(jié)構(gòu)模式、多線程、實(shí)現(xiàn)設(shè)計(jì)點(diǎn)對點(diǎn)和點(diǎn)對面通信的一個多人網(wǎng)絡(luò)連天工具,可以進(jìn)行私聊、群聊、文件傳輸?shù)?關(guān)鍵詞:Java;聊天室;線程;協(xié)議;數(shù)據(jù)
2、流;C/S結(jié)構(gòu);AbstractWith the advent of the information revolution, using networking tools to communicate one thing has become indispensable in our daily life are inseparable from the comparison with the use of mobile communications and text messaging communication, they are too cumbersome and costly, an
3、d online communication tools due to ease of use, instant transfer of information, especially the many young people to the pursuit and use. More critical is networking tools provides us with a low consumption easier communication platform, the network platform has extensive tools, immediacy, convenie
4、nce, and therefore get the majority of companies, institutions, universities and public recognition, this paper describes is based on the use of TCP / IP protocol, the use of storage and reading of data flow, C / S frame mode, multi-threaded, to implement a multiplayer online groaning tool design po
5、int and point opposite the communications, you can private chat, group chat, file transfer, and so on.Keywords: Java; chat rooms; thread; protocol; data stream; C / S structure;目錄TOC o 1-3 h z u HYPERLINK l _Toc200 第1章 緒論 PAGEREF _Toc200 3 HYPERLINK l _Toc14618 PAGEREF _Toc14618 3 HYPERLINK l _Toc32
6、402 PAGEREF _Toc32402 4 HYPERLINK l _Toc6222 第2章 系統(tǒng)概況 PAGEREF _Toc6222 4 HYPERLINK l _Toc11357 PAGEREF _Toc11357 4 HYPERLINK l _Toc11606 PAGEREF _Toc11606 4 HYPERLINK l _Toc4140 2.2.1 java多線程技術(shù) PAGEREF _Toc4140 4 HYPERLINK l _Toc7899 2.2.2 TCP/IP協(xié)議 PAGEREF _Toc7899 5 HYPERLINK l _Toc21481 2.2.4 java
7、數(shù)據(jù)流技術(shù) PAGEREF _Toc21481 6 HYPERLINK l _Toc15712 第3章 關(guān)于多人聊天室的分析和設(shè)計(jì) PAGEREF _Toc15712 7 HYPERLINK l _Toc9032 PAGEREF _Toc9032 7 HYPERLINK l _Toc5658 PAGEREF _Toc5658 7 HYPERLINK l _Toc28081 PAGEREF _Toc28081 8 HYPERLINK l _Toc15799 PAGEREF _Toc15799 8 HYPERLINK l _Toc21624 3.2.2 效勞器端系統(tǒng)分析 PAGEREF _Toc2
8、1624 9 HYPERLINK l _Toc6694 PAGEREF _Toc6694 10 HYPERLINK l _Toc4088 第4章 系統(tǒng)實(shí)現(xiàn) PAGEREF _Toc4088 11 HYPERLINK l _Toc27617 5.1 客戶端界面和功能實(shí)現(xiàn) PAGEREF _Toc27617 11 HYPERLINK l _Toc10815 5.1.1 登錄和注冊界面 PAGEREF _Toc10815 11 HYPERLINK l _Toc6727 5.1.2 用戶列表界面 PAGEREF _Toc6727 21 HYPERLINK l _Toc9332 5.1.3 聊天窗口和文
9、件傳輸界面 PAGEREF _Toc9332 26 HYPERLINK l _Toc9226 5.2 效勞器端實(shí)現(xiàn) PAGEREF _Toc9226 35 HYPERLINK l _Toc1059 第5章 結(jié)束語 PAGEREF _Toc1059 41 HYPERLINK l _Toc23482 參考文獻(xiàn) PAGEREF _Toc23482 41第1章 緒論在信息爆炸的今天信息的溝通和交流已經(jīng)和我們息息相關(guān)。盡管一些通信工具和通信手段,例如 和 ,可是 短信和 通訊相對于網(wǎng)絡(luò)通信工具日積月累下來花費(fèi)也是相當(dāng)不菲;所以一般的通信工具對于長時間的溝通和交流以及大量的信息傳輸都是相當(dāng)不便和不劃算的。
10、網(wǎng)絡(luò)通訊工具和軟件,同樣的由于它的方便快捷和免費(fèi)性,僅需要之間都有能夠連接互聯(lián)網(wǎng)的Computer或者 等工具,安裝有對應(yīng)的工具或客戶端,這樣能夠進(jìn)行大量的信息傳輸和溝通;網(wǎng)絡(luò)聊天工具同時方便與我們與不國家、不同地點(diǎn)和多個人進(jìn)行溝通,交流的過程中還可以傳輸發(fā)送大量的資料,相比擬而言更加的方便快捷也沒有傳統(tǒng)通信工具的局限性,更加節(jié)省了過多的通信花費(fèi);而且它還具有 和短信所沒有的視頻和語音聊天功能,可以使用戶得到不同于傳統(tǒng)通信手段的優(yōu)質(zhì)效勞。這也讓網(wǎng)絡(luò)通信工具受到了廣闊的公司、企業(yè)及院校的追捧,大多的企業(yè)和院校都有相應(yīng)的網(wǎng)絡(luò)通信軟件工具或者對應(yīng)的自己開發(fā)的網(wǎng)絡(luò)通信工具,方便于進(jìn)行企業(yè)和院校日常的信
11、息和事務(wù)處理。本論文所表達(dá)的多人聊天是軟件是通過了解廣泛受到群眾喜愛的聊天工具qq的根底上自己模仿制作的一個實(shí)現(xiàn)了局部功能作用的網(wǎng)絡(luò)聊天工具。網(wǎng)絡(luò)聊天工具會幫助事業(yè)單位、公司和群眾帶來便捷的信息事務(wù)處理??梢詭椭罕娊鉀Q信息傳輸和溝通中的數(shù)據(jù)和信息無法及時接受和傳輸?shù)膯栴},它的即時性,廣域性和無局限性為企業(yè)和群眾之間的感情凝聚,與外界的溝通交流也因此變得更加高效和方便,它改變了我們的生活方式。在現(xiàn)實(shí)生活中我們有多種手段和親戚朋友溝通交流和通訊,但要么是實(shí)時性不強(qiáng)或那么是費(fèi)用太高、功能單一無法做到網(wǎng)絡(luò)聊天工具的多樣性功能,能夠同時與多個好友進(jìn)行通訊,這無疑填補(bǔ)了我們生活方式的空白,而網(wǎng)絡(luò)聊天軟件
12、的使用方便快捷、系統(tǒng)占用消耗資源少等諸多優(yōu)點(diǎn),都讓他快速成為了企業(yè)事業(yè)單位和個人廣泛應(yīng)用的軟件之一。第2章 系統(tǒng)概況軟件系統(tǒng)主要功能注冊:用戶需要輸入昵稱和密碼,并且昵稱是沒有被占用且合法的,而密碼和輸入的重復(fù)密碼也是一致的,才會提示注冊成功;2.用戶登錄:用戶需要輸入相應(yīng)的用戶昵稱和用戶密碼,這樣用戶才能登陸通過,然后轉(zhuǎn)到用戶列表信息界面,如假設(shè)用戶昵稱和用戶密碼都輸入錯誤,那么我們會彈出一個信息提示框,提示用戶信息輸入錯誤和登陸失敗。3.用戶聊天:用戶聊天分為私聊和群聊,群聊不指定任何用戶,即所有用戶都可以接受信息和回復(fù)信息,私聊即指定用戶接受信息,具有隱秘性;4.文件傳輸:用戶之間可以共
13、享發(fā)送文件和資料,在聊天界面點(diǎn)擊發(fā)送文件按鈕,然后選擇文件發(fā)送即可;軟件系統(tǒng)所用技術(shù)2.2.1 java多線程技術(shù)什么是進(jìn)程,進(jìn)程process是一個占有資源和需要消耗資源的內(nèi)存區(qū)域,我們根據(jù)他的功能單元會對他在操作系統(tǒng)進(jìn)行區(qū)分,進(jìn)程中所包含的一個或多個執(zhí)行單元稱為線 程thread。一個操作系統(tǒng)做可以同時運(yùn)行多個程序任務(wù),每個被運(yùn)行的程序任務(wù)都可以被稱為一個進(jìn)程。一個程序同時運(yùn)行多個任務(wù),那么每個任務(wù)就稱作為一個線程。線程只能歸屬于一個進(jìn)程并且它只能訪問該進(jìn)程所擁有的資源。當(dāng)操作系統(tǒng)創(chuàng)立一個進(jìn)程后,該進(jìn)程會自動申請一個名為主線程或首要線程的線程。通常,操作系統(tǒng)上運(yùn)行的每一個應(yīng)用程 序都運(yùn)行在
14、一個進(jìn)程中,例如:QQ,IE等等。線程是并發(fā)運(yùn)行的,操作系統(tǒng)將運(yùn)行時間分為假設(shè)干個時間片段,盡可能均勻的分配給每一個任務(wù),被分配時間片段之后,任務(wù)就有可能CPU所執(zhí)行,從微觀上來講,每個任務(wù)都是走走停停,但是隨著任務(wù)的執(zhí)行宏觀上來看就是所有任務(wù)都在執(zhí)行,這種都運(yùn)行的現(xiàn)象就稱之為并發(fā),但絕對不是真正意義上的“同時發(fā)生。在多人聊天室中我們把這個技術(shù)運(yùn)用到用戶聊天這個功能當(dāng)中,實(shí)現(xiàn)用戶的群聊和私聊。2.2.2 TCP/IP協(xié)議 TCP/IPTransmission Control Protocol/Internet Protocol)的簡寫,包含了一系列構(gòu)成互聯(lián)網(wǎng)根底的網(wǎng)絡(luò)協(xié)議。這些協(xié)議最早發(fā)源于美
15、國國防部的DARPA互聯(lián)網(wǎng)工程。TCP/IP字面上代表了兩個協(xié)議:TCP傳輸控制協(xié)議和IP互聯(lián)網(wǎng)協(xié)議。TCP/IP協(xié)議并不完全符合OSI的七層參考模型。傳統(tǒng)的開放式系統(tǒng)互連參考模型,是一種通信協(xié)議的7層抽象的參考模型,其中每一層執(zhí)行某一特定任務(wù)。該模型的目的是使各種硬件在相同的層次上相互通信。這7層是:物理層、數(shù)據(jù)鏈路層、網(wǎng)路層、傳輸層、話路層、表示層和應(yīng)用層。而TCP/IP通訊協(xié)議采用了4層的層級結(jié)構(gòu),每一層都呼叫它的下一層所提供的網(wǎng)絡(luò)來完成自己的需求。這4層分別為:應(yīng)用層、傳輸層、互連網(wǎng)絡(luò)層、網(wǎng)絡(luò)接口層。在多人聊天室中那么是在這種協(xié)議根底上實(shí)現(xiàn)的彼此之間的信息交流。2.2.3 java S
16、oket技術(shù)Socket“套接字,它在.Socket包下。網(wǎng)絡(luò)通信模型:C/S:client/server,客戶端/效勞器端,B/S:browser/server,瀏覽器端和效勞端。C/S結(jié)構(gòu)的優(yōu)點(diǎn),應(yīng)用性強(qiáng),畫面比擬多樣和絢麗。用用功能復(fù)雜。缺點(diǎn):不易維護(hù),B/S結(jié)構(gòu)的優(yōu)點(diǎn):易于維護(hù),缺點(diǎn):效果差,交互性不強(qiáng)。Socket封裝這本地的地址,效勞端口等信息,ServerSocket:效勞端套接字。永遠(yuǎn)都是socket主動去連接ServerSocket,一個ServerSocket可以連接假設(shè)干個Socket。網(wǎng)絡(luò)通信的前提,一定要捕獲異常,然后進(jìn)行對異常處理。在多人聊天室中我們使用Soket套
17、接字發(fā)送或那么應(yīng)答網(wǎng)絡(luò)請求,同時綁定和監(jiān)聽7788網(wǎng)絡(luò)端口。亦通過Soket獲取網(wǎng)絡(luò)輸出流和網(wǎng)絡(luò)輸入流,在創(chuàng)立了Client和Servlet的連接后即可通過輸出和輸入流實(shí)現(xiàn)網(wǎng)絡(luò)通訊。 2.2.4 java數(shù)據(jù)流技術(shù)Java提供了一個可以對文件隨機(jī)訪問的操作,訪問包括讀和寫操作。該類名為RandomAccessFile。該類的讀寫是基于指針的操作。RandomAccessFile在對文件進(jìn)行隨機(jī)訪問操作時有兩個模式,分別為只讀模式(只讀取文件數(shù)據(jù)),和讀寫模式(對文件數(shù)據(jù)進(jìn)行讀寫)。流根據(jù)方向分為輸入和輸出流,方向的定位是根據(jù)我們的程序的,流向我們程序的稱為輸入流,從程序往外流的我們稱為輸出流。
18、輸入流是用于獲取數(shù)據(jù)的,輸出流是用于往外輸出數(shù)據(jù)的。FileInputStream:通過翻開一個到實(shí)際文件的連接來創(chuàng)立一個FileInputStream,該文件通過系統(tǒng)中的File對象指定,即向文件中輸入數(shù)據(jù)。FileOutputStream,創(chuàng)立一個向指定文件對象中寫入數(shù)據(jù)的文件輸出流,會重寫以前的內(nèi)容,向File文件中輸入內(nèi)容時,假設(shè)該文件不存在,將會自動創(chuàng)立該文件。在多人聊天室軟件中,我們主要是將文件輸出和文件輸入流運(yùn)用到登錄和注冊、注冊檢驗(yàn)和登錄檢驗(yàn),以及信息的發(fā)送和接受中。2.2.5 java圖形界面編程技術(shù)圖形界面編程技術(shù)它所使用的包是放在java.awt包下面的AWT(Abstr
19、actWindowToolkit),即為抽象窗口工具包,是由sun公司提供使用的用于圖像界面編程(gui)的一個包。根底的使用就是創(chuàng)立一個label對象,然后調(diào)用它的方法,使用工具包來創(chuàng)立對象,易啊不能來說,我們所開發(fā)的界面是可以在所有的操作系統(tǒng)上所使用的,這可以節(jié)省我們很多的麻煩。在多人聊天室系統(tǒng)中,我們在設(shè)計(jì)聊天室的登錄、注冊和聊天窗口中我們都運(yùn)用到了java圖形界面編程技術(shù)。2.3 軟件系統(tǒng)工作原理Java多人聊天室是基于TCP/IP協(xié)議的根底上設(shè)計(jì)的一種采用C/S模式的可實(shí)現(xiàn)多人聊天和傳輸文件的軟件,在這個軟件中我們采用了圖形界面編程技術(shù)設(shè)計(jì)實(shí)現(xiàn)了軟件的登錄和注冊、聊天窗口,到達(dá)了軟件
20、的美化效果。用戶的注冊和登錄檢驗(yàn)以及信息的發(fā)送和接受我們是運(yùn)用到了java的數(shù)據(jù)流技術(shù),通過java文件輸出和輸入流獲取指定文件中用戶的信息從而檢驗(yàn)用戶名和密碼是否正確,以及通過Soket運(yùn)用字符流的輸入和輸出接受和發(fā)送用戶的信息,從而到達(dá)用戶之間的通訊和交流。通過java的多線程技術(shù)我們實(shí)現(xiàn)了用戶的群聊和私聊功能,從而滿足了用戶的兩種不同需求。在Servlet方面,我們首先通過Socket建立效勞器和客戶端之間的連接,創(chuàng)立Soket實(shí)例,使用ServletSoket監(jiān)聽端口,獲取用戶狀態(tài)以及用戶的網(wǎng)絡(luò)發(fā)送請求和應(yīng)答請求,在本文并沒有過多實(shí)現(xiàn)效勞器端的功能,所以效勞器端只是一個文件和數(shù)據(jù)的中轉(zhuǎn)
21、站和傳輸站。第3章 關(guān)于多人聊天室的分析和設(shè)計(jì)系統(tǒng)可行性分析Java語言,它是一種方便我們?nèi)ダ斫庖卜奖阄覀內(nèi)ピO(shè)計(jì)和開發(fā)的編程語言,它相較于其他的編程語言,有許多別的不具有的優(yōu)勢,這種編程語言是比擬簡單的,它不受限與操作系統(tǒng)平臺,然后它是在C+的根底上進(jìn)化過來的,所以它的身上還有很多C語言的痕跡,java語言相對于別的編程語言它是出現(xiàn)的比擬晚的,這也決定了他的先進(jìn)性。這也就表達(dá)了java語言的通用性和便捷性,使我們不需要為了在不同的平臺運(yùn)行而去修改程序煩惱,這大大提高了我們程序和代碼的重用性,也同時提高了我們編程的效率,不過,每次的編譯執(zhí)行需要消耗一定的時間,這同時也在一定程度上降低了 Java
22、 程序的運(yùn)行效率。但在 J2SE 1.4.2 發(fā)布后,java編程語言它到現(xiàn)在為止是比擬完善的、先進(jìn)的、便于掌握的、便于開發(fā)的,這也就是java語言風(fēng)行全球的原因所在,所以這個多人聊天室軟件就是采用的java語言而實(shí)現(xiàn)開發(fā)設(shè)計(jì)的,在通過myeclipse我的設(shè)計(jì)過程中大大提高了我的工作效率,也同時幫我解決了一些API不熟練的問題,作為一款輔助編程工具,myeclipse在java開發(fā)這個行業(yè)類普及率是非常高的,而Soket是進(jìn)行網(wǎng)絡(luò)通信編程的一種強(qiáng)大的API,也是諸多操作系統(tǒng)的網(wǎng)絡(luò)通用標(biāo)準(zhǔn)。本系統(tǒng)主要分為兩大局部:TCP/IP Server和客戶端client以下就是客戶端Client和Ser
23、ver效勞器端的程序運(yùn)行模塊圖:實(shí)現(xiàn)分析客戶端的主要功能還是提供用戶之間的聊天效勞和文件傳輸效勞,但是我們會通過注冊頁面和登錄頁面先進(jìn)行用戶驗(yàn)證,然后在用戶列表界面我們找到好友進(jìn)行通訊,我們可以選擇私聊和群聊,也可以向另一個用戶傳輸文件和資料,下面進(jìn)行詳細(xì)分析。1.登錄界面登錄界面上,將會顯示兩個用戶輸入框,一個是用戶輸入框和用戶密碼輸入框。在用戶輸入完用戶信息之后,雙擊登陸按鈕,客戶端Client將會開始和Server效勞器進(jìn)行連接,在Server和Client鏈接過程中,首先會檢查Server效勞器是否啟動,亦或者是效勞器網(wǎng)絡(luò)是否暢通,客戶端Client和Server效勞器端連接是否成功,
24、如果客戶端Client和Server沒有連接成功,登錄界面會給出一個友好的提示框,提示用戶效勞器沒有啟動或者效勞器Server連接錯誤。其次在客戶端會通過圖形界面編程的API獲取用戶在登陸界面輸入的用戶名和用戶密碼,通過數(shù)據(jù)流傳輸?shù)叫谄鳎瑢lient傳送過來的用戶帳號和用戶密碼和Server端的文件所存儲的用戶名和密碼相對照,如果用戶昵稱和用戶密碼都輸入正確,提示登陸成功,將用戶轉(zhuǎn)到聊天窗口界面。反之那么會彈出提示用戶昵稱或者用戶密碼輸入錯誤,提示用戶重新輸入用戶信息。2.用戶列表界面用戶列表信息界面是要在成功登錄后,彈出的一個展示用戶的好友信息的一個列表,在上面有一個群聊按鈕,點(diǎn)擊群聊按
25、鈕將會彈出群聊窗口進(jìn)行多人聊天,也可以雙擊好友昵稱進(jìn)行私聊,這個功能是通過界面的點(diǎn)擊事件,然后傳遞信息的,觸發(fā)事件之后通過數(shù)據(jù)流和節(jié)點(diǎn)處理進(jìn)行分析和處理,從而判斷用戶是否要使用私聊或者使用群聊。3.聊天窗口 聊天窗口也是作為這個多人聊天室軟件的主界面,在這個,用戶可以進(jìn)行多人聊天和私聊。也可以向另一個用戶發(fā)送文件和資料,在聊天窗口界面上有一個傳輸文件按鈕,點(diǎn)擊即可從電腦上選擇文件傳輸給另一個用戶,在這里我們首先是采用socket建立Client和Server的信息連接,這樣多個客戶端之間才能通過Server傳遞消息,其中客戶端和效勞端的發(fā)送和接受信息都是要通過I/O流進(jìn)行解析和傳遞復(fù)制信息的,
26、每個客戶端對應(yīng)一個線程進(jìn)行處理這個客戶端的所有事務(wù),客戶端對應(yīng)線程會處理效勞器端傳輸過來的信息然后傳遞給用戶顯示在用戶聊天界面,所以采用了多線程技術(shù),客戶端不僅要接受效勞端傳輸過來的信息,也要對效勞器進(jìn)行信息反響,所以要有一個專門的線程給效勞端效勞。傳輸文件的話我們主要是運(yùn)用到I/O流這個技術(shù)的,通過字符流和字符緩沖流我們將文件逐行讀取解析復(fù)制,然后通過字節(jié)流和字節(jié)輸出流將所讀取到的字符解析成字節(jié),輸入到同一名稱的文件中給用戶。3.2.2 效勞器端系統(tǒng)分析效勞器端的的主要作用通過ServerSocket在效勞器上建立一個效勞器端口號,通過Socket使用這個Socket端口號將客戶端與效勞器端
27、相連接。從而通過socket獲取從客戶端讀取的數(shù)據(jù)進(jìn)行分析處理,最后將處理解析結(jié)果反響給客戶端,比方,用戶登錄時,通過soket將用戶名和用戶密碼傳遞給效勞器端,效勞器端再將客戶端傳遞過來的數(shù)據(jù)和存儲在文件中的數(shù)據(jù)進(jìn)行比照,如果數(shù)據(jù)相符合那么效勞器返回結(jié)果,從而跳轉(zhuǎn)到用戶信息列表界面,如果驗(yàn)證失敗,那么彈出相應(yīng)提示,重新登陸。用戶之間的信息傳輸也是通過效勞器端的中轉(zhuǎn)處理,然后通過線程和I/O流傳輸給另一個用戶,效勞器端還有一個作用就是存儲和中轉(zhuǎn)用戶的信息和資料,通過線程獲取客戶端信息,然后從Soket那里得到用戶要傳遞和存儲的信息,使用I/O流進(jìn)行處理分析,最后存儲到文件中或傳遞給用戶。為了讓
28、我們更好的了解和設(shè)計(jì)多人聊天室這個軟件,也更好的開發(fā)和維護(hù)這個軟件,我們根據(jù)客戶端和效勞器端的功能模塊之間的邏輯關(guān)系給出了一個流程圖,這個流程圖主要是分為效勞器端和客戶端兩個局部,效勞器端我們從建立ServerSoket端口號開始進(jìn)行解析,到線程死亡結(jié)束,客戶端我們從登陸界面開始到用戶關(guān)閉聊天窗口結(jié)束。 根據(jù)流程圖我們可以得出用戶首先要通過登錄界面成功通過用戶名和用戶密碼的驗(yàn)證,就可以成功進(jìn)入聊天室進(jìn)行多人聊天和用戶私聊,如果沒有帳號,那么需要通過注冊將用戶信息存儲到效勞器端,然后登錄。出現(xiàn)幾個客戶端時,效勞端就會才用多線程技術(shù),這樣客戶端與客戶端的信息才不會出現(xiàn)混淆,而效勞器端也有一個線程進(jìn)
29、行專門管理客戶端反響過來的信息,進(jìn)而提高效勞器的處理效率。第4章 系統(tǒng)實(shí)現(xiàn)5.1 客戶端界面和功能實(shí)現(xiàn)5.1.1 登錄和注冊界面登錄界面登陸界面關(guān)鍵代碼public class Login private JFrame jFrame = null; private JPanel jContentPane = null;private JLabel jLabelLoginUserName = null;private JLabel jLabelLoginPassword = null;private JTextField jTextFieldLoginUserName = null;privat
30、e JPasswordField jTextFieldLoginPassword = null;public JButton jButtonLogin = null;public JButton jButtonReg = null;private LinkInfo linkInfo;private InputStream in; private OutputStream out; private GetServerInfo gif;public Login(LinkInfo linkInfo)this.linkInfo = linkInfo;this.getJFrame().setVisibl
31、e(true);/* * This method initializes jFrame * * return javax.swing.JFrame */public void closeFrame()this.jFrame.dispose();this.linkInfo.setLogin(null);private JFrame getJFrame() if (jFrame = null) jFrame = new JFrame();jFrame.setSize(new Dimension(389, 274);jFrame.setTitle(登陸);jFrame.setResizable(fa
32、lse);jFrame.setContentPane(getJContentPane();jFrame.addWindowListener(new java.awt.event.WindowAdapter() public void windowClosing(java.awt.event.WindowEvent e) System.exit(0););return jFrame;/* * This method initializes jContentPane * * return javax.swing.JPanel */private JPanel getJContentPane() i
33、f (jContentPane = null) jLabelLoginPassword = new JLabel();jLabelLoginPassword.setBounds(new Rectangle(18, 107, 335, 38);jLabelLoginPassword.setFont(new Font(Dialog, Font.BOLD, 14);jLabelLoginPassword.setText( 密 碼:);jLabelLoginUserName = new JLabel();jLabelLoginUserName.setBounds(new Rectangle(18, 5
34、3, 335, 38);jLabelLoginUserName.setFont(new Font(Dialog, Font.BOLD, 14);jLabelLoginUserName.setText( Talk號:);jContentPane = new JPanel();jContentPane.setLayout(null);jContentPane.add(jLabelLoginUserName, null);jContentPane.add(jLabelLoginPassword, null);jContentPane.add(getJTextFieldLoginUserName(),
35、 null);jContentPane.add(getJTextFieldLoginPassword(), null);jContentPane.add(getJButtonLogin(), null);jContentPane.add(getJButtonReg(), null);return jContentPane;/* * This method initializes jTextFieldLoginUserName * * return javax.swing.JTextField */private JTextField getJTextFieldLoginUserName() i
36、f (jTextFieldLoginUserName = null) jTextFieldLoginUserName = new JTextField();jTextFieldLoginUserName.setBounds(new Rectangle(84, 56, 266, 33);jTextFieldLoginUserName.addKeyListener(new java.awt.event.KeyAdapter() public void keyPressed(java.awt.event.KeyEvent e) if(e.getKeyCode()=java.awt.event.Key
37、Event.VK_ENTER)/當(dāng)在用戶名框中按回車時,調(diào)用登陸方法doLogin(););return jTextFieldLoginUserName;/* * This method initializes jTextFieldLoginPassword * * return javax.swing.JTextField */private JTextField getJTextFieldLoginPassword() if (jTextFieldLoginPassword = null) jTextFieldLoginPassword = new JPasswordField();jTe
38、xtFieldLoginPassword.setBounds(new Rectangle(84, 111, 266, 33);jTextFieldLoginPassword.addKeyListener(new java.awt.event.KeyAdapter() public void keyPressed(java.awt.event.KeyEvent e) if(e.getKeyCode()=java.awt.event.KeyEvent.VK_ENTER)/當(dāng)在密碼框中按回車時,調(diào)用登陸方法doLogin(););return jTextFieldLoginPassword;/* *
39、 This method initializes jButtonLogin * * return javax.swing.JButton */private JButton getJButtonLogin() if (jButtonLogin = null) jButtonLogin = new JButton();jButtonLogin.setBounds(new Rectangle(143, 162, 120, 41);jButtonLogin.setText(登陸);jButtonLogin.addActionListener(new java.awt.event.ActionList
40、ener() public void actionPerformed(java.awt.event.ActionEvent e) /當(dāng)點(diǎn)擊了登陸按鈕時,調(diào)用登陸方法doLogin(); );return jButtonLogin;/登陸方法private void doLogin()try/連接效勞器端this.linkInfo.initSocket();if(this.linkInfo.getSocket()!=null)/做一些簡單的驗(yàn)證,實(shí)際上這里應(yīng)該有比擬復(fù)雜的驗(yàn)證,比方敏感字符if(jTextFieldLoginUserName.getText()!=null&!jTextField
41、LoginUserName.getText().equals()&jTextFieldLoginPassword.getText()!=null&!jTextFieldLoginPassword.getText().equals()if(in=null)in = this.linkInfo.getSocket().getInputStream();if(out=null)out = this.linkInfo.getSocket().getOutputStream();/如果獲取來自效勞器端信息的線程沒有啟動,那么啟動該線程if(gif=null)gif = new GetServerInfo
42、(this.linkInfo);new Thread(gif).start();/登陸過程中,使登陸界面上的登陸按鈕不可用jButtonLogin.setEnabled(false);/設(shè)置LinkInfo中自己的信息this.linkInfo.setMe(jTextFieldLoginUserName.getText();/發(fā)送登陸請求IOUtil.writeShort(Request_Command.LOGIN, out);IOUtil.writeString(jTextFieldLoginUserName.getText(), out);IOUtil.writeString(jTextF
43、ieldLoginPassword.getText(), out);elsethis.linkInfo.getAlert().showAlert(用戶名或密碼為空);catch(Exception e)e.printStackTrace();注冊界面關(guān)鍵代碼/* * This method initializes jButtonReg * * return javax.swing.JButton */private JButton getJButtonReg() if (jButtonReg = null) jButtonReg = new JButton();jButtonReg.setBo
44、unds(new Rectangle(295, 214, 82, 28);jButtonReg.setText(去注冊);jButtonReg.addActionListener(new java.awt.event.ActionListener() public void actionPerformed(java.awt.event.ActionEvent e) /如果點(diǎn)擊了去注冊按鈕/關(guān)閉登陸框closeFrame();/顯示注冊框linkInfo.setReg(new Reg(linkInfo););return jButtonReg;public class Reg private J
45、Frame jFrame = null; / jve:decl-index=0:visual-constraint=241,22private JPanel jContentPane = null;private JLabel jLabelRegUserName = null;private JLabel jLabelRegPassword = null;private JLabel jLabelRegRepassword = null;private JTextField jTextFieldRegUserName = null;private JPasswordField jTextFie
46、ldRegPassword = null;private JPasswordField jTextFieldRegRepassword = null;public JButton jButtonReg = null;public JButton jButtonLogin = null;private InputStream in; private OutputStream out; / jve:decl-index=0:private GetServerInfo gif;private LinkInfo linkInfo;public Reg(LinkInfo linkInfo)this.li
47、nkInfo = linkInfo;this.linkInfo.setReg(this);this.getJFrame().setVisible(true);public void closeFrame()this.jFrame.dispose();this.linkInfo.setReg(null);/* * This method initializes jFrame * * return javax.swing.JFrame */private JFrame getJFrame() if (jFrame = null) jFrame = new JFrame();jFrame.setSi
48、ze(new Dimension(398, 337);jFrame.setTitle(注冊);jFrame.setResizable(false);jFrame.setContentPane(getJContentPane();jFrame.addWindowListener(new java.awt.event.WindowAdapter() public void windowClosing(java.awt.event.WindowEvent e) System.exit(0););return jFrame;/* * This method initializes jContentPa
49、ne * * return javax.swing.JPanel */private JPanel getJContentPane() if (jContentPane = null) jLabelRegRepassword = new JLabel();jLabelRegRepassword.setBounds(new Rectangle(15, 162, 357, 47);jLabelRegRepassword.setFont(new Font(Dialog, Font.BOLD, 18);jLabelRegRepassword.setText( 確認(rèn)密碼:);jLabelRegPassw
50、ord = new JLabel();jLabelRegPassword.setBounds(new Rectangle(15, 94, 357, 47);jLabelRegPassword.setFont(new Font(Dialog, Font.BOLD, 18);jLabelRegPassword.setText( 密 碼:);jLabelRegUserName = new JLabel();jLabelRegUserName.setBounds(new Rectangle(15, 31, 357, 47);jLabelRegUserName.setFont(new Font(Dial
51、og, Font.BOLD, 18);jLabelRegUserName.setText( 昵 稱:);jContentPane = new JPanel();jContentPane.setLayout(null);jContentPane.add(jLabelRegUserName, null);jContentPane.add(jLabelRegPassword, null);jContentPane.add(jLabelRegRepassword, null);jContentPane.add(getJTextFieldRegUserName(), null);jContentPane
52、.add(getJTextFieldRegPassword(), null);jContentPane.add(getJTextFieldRegRepassword(), null);jContentPane.add(getJButtonReg(), null);jContentPane.add(getJButtonLogin(), null);return jContentPane;/* * This method initializes jTextFieldRegUserName * * return javax.swing.JTextField */private JTextField
53、getJTextFieldRegUserName() if (jTextFieldRegUserName = null) jTextFieldRegUserName = new JTextField();jTextFieldRegUserName.setBounds(new Rectangle(110, 34, 258, 41);return jTextFieldRegUserName;/* * This method initializes jTextFieldRegPassword * * return javax.swing.JTextField */private JPasswordF
54、ield getJTextFieldRegPassword() if (jTextFieldRegPassword = null) jTextFieldRegPassword = new JPasswordField();jTextFieldRegPassword.setBounds(new Rectangle(110, 97, 258, 41);return jTextFieldRegPassword;/* * This method initializes jTextFieldRegRepassword * * return javax.swing.JTextField */private
55、 JPasswordField getJTextFieldRegRepassword() if (jTextFieldRegRepassword = null) jTextFieldRegRepassword = new JPasswordField();jTextFieldRegRepassword.setBounds(new Rectangle(111, 165, 258, 41);return jTextFieldRegRepassword;/* * This method initializes jButtonReg * * return javax.swing.JButton */p
56、rivate JButton getJButtonReg() if (jButtonReg = null) jButtonReg = new JButton();jButtonReg.setBounds(new Rectangle(146, 221, 131, 49);jButtonReg.setText(注冊);jButtonReg.addActionListener(new java.awt.event.ActionListener() public void actionPerformed(java.awt.event.ActionEvent e) doReg(););return jB
57、uttonReg;/* * This method initializes jButtonLogin * * return javax.swing.JButton */private JButton getJButtonLogin() if (jButtonLogin = null) jButtonLogin = new JButton();jButtonLogin.setBounds(new Rectangle(289, 266, 88, 28);jButtonLogin.setText(去登陸);jButtonLogin.addActionListener(new java.awt.eve
58、nt.ActionListener() public void actionPerformed(java.awt.event.ActionEvent e) /如果點(diǎn)擊了去登陸按鈕/關(guān)閉注冊框closeFrame();/翻開登陸框linkInfo.setLogin(new Login(linkInfo););return jButtonLogin;/注冊方法private void doReg()try/連接效勞器端this.linkInfo.initSocket();if(this.linkInfo.getSocket()!=null)/做一些簡單的驗(yàn)證,實(shí)際上這里應(yīng)該有比擬復(fù)雜的驗(yàn)證,比方敏
59、感字符if(jTextFieldRegUserName.getText()!=null&!jTextFieldRegUserName.getText().equals()&jTextFieldRegPassword.getText()!=null&!jTextFieldRegPassword.getText().equals()&jTextFieldRegRepassword.getText()!=null&!jTextFieldRegRepassword.getText().equals()if(!jTextFieldRegRepassword.getText().equals(jTextF
60、ieldRegPassword.getText()this.linkInfo.getAlert().showAlert(兩次密碼輸入不一致);elseif(in=null)in = this.linkInfo.getSocket().getInputStream();if(out=null)out = this.linkInfo.getSocket().getOutputStream();/如果獲取來自效勞器端信息的線程沒有啟動,那么啟動該線程if(gif=null)gif = new GetServerInfo(this.linkInfo);new Thread(gif).start();/
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 未成年人思想道德教育的工作計(jì)劃
- 工作總結(jié)及計(jì)劃范文
- 2025教師校本研修工作計(jì)劃范文
- 暑期校本培訓(xùn)計(jì)劃
- 2025應(yīng)急預(yù)案演練計(jì)劃
- 下半年教科研工作計(jì)劃
- 監(jiān)理年度工作計(jì)劃集錦
- 《正弦電壓電流》課件
- 土地承包合同糾紛辯論詞
- 航空運(yùn)輸合同的法律關(guān)系
- (2024)醫(yī)師定期考核法律法規(guī)必刷題庫及答案
- 人音版音樂二年級上冊《小紅帽》說課稿
- 人教版(PEP)英語四年級上冊《Unit 1 My classroom》單元教學(xué)設(shè)計(jì) 1
- 職業(yè)院?!敖鹫n”建設(shè)方案
- CJT 394-2018 電磁式燃?xì)饩o急切斷閥
- 中央2024年應(yīng)急管理部宣傳教育中心招聘筆試歷年典型考題及考點(diǎn)附答案解析
- 學(xué)前教育普及普惠督導(dǎo)評估內(nèi)容和標(biāo)準(zhǔn)量化評分表
- 江蘇省南通市海安市2023-2024學(xué)年六年級下學(xué)期期末綜合試卷
- 2024-2034年中國飛機(jī)拆解行業(yè)市場現(xiàn)狀分析及競爭格局與投資發(fā)展研究報(bào)告
- 手術(shù)物品準(zhǔn)備完善率
- 2024年西藏自治區(qū)中考地理真題(原卷版)
評論
0/150
提交評論