聊天程序java_第1頁
聊天程序java_第2頁
聊天程序java_第3頁
聊天程序java_第4頁
聊天程序java_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、塔里木大學(xué)信息工程學(xué)院課程設(shè)計(jì)目錄前言- 1 -工程概況- 1 -正文- 1 -2.1課程任務(wù)及要求- 1 -2.2選題意義- 2 -2.3 程序需求分析- 2 -2.3.1可行性分析- 2 -2.3.2 服務(wù)器端- 2 -2.3.3 客戶端- 3 -2.4 算法設(shè)計(jì)- 3 -2.4.1 UML圖如下:- 3 -2.4.2 C/S模式套接字的連接- 4 -2.4.3 文字聊天的實(shí)現(xiàn)- 4 -2.5 程序設(shè)計(jì)與實(shí)現(xiàn)- 5 -2.5.1建立連接- 5 -2.5.2斷開連接- 5 -2.5.3 C/S模式套接字的連接- 6 -2.6程序測試與分析- 8 -2.6.1啟動(dòng)服務(wù)器- 8 -2.6.2啟動(dòng)

2、客戶端- 8 -2.6.3成功啟動(dòng)客戶端- 8 -2.6.4聊天過程- 9 -2.6.5 斷開連接- 9 -2.7課程設(shè)計(jì)小結(jié)- 10 -參考文獻(xiàn)- 10 -課程設(shè)計(jì)總結(jié)- 11 -致謝- 12 -附錄- 13 -前言JAVA程序設(shè)計(jì)教程是一門實(shí)踐性很強(qiáng)的計(jì)算機(jī)專業(yè)基礎(chǔ)課程,課程設(shè)計(jì)是學(xué)習(xí)完該課程后進(jìn)行的一次較全面的綜合練習(xí)。其目的在于通過實(shí)踐加深學(xué)生對(duì)面向?qū)ο蟪绦蛟O(shè)計(jì)的理論、方法和基礎(chǔ)知識(shí)的理解,掌握使用Java語言進(jìn)行面向?qū)ο笤O(shè)計(jì)的基本方法,提高運(yùn)用面向?qū)ο笾R(shí)分析實(shí)際問題、解決實(shí)際問題的能力。Java是一種可以撰寫跨平臺(tái)應(yīng)用軟件的面向?qū)ο蟮某绦蛟O(shè)計(jì)語言,是由Sun Microsystem

3、s公司于1995年5月推出的Java程序設(shè)計(jì)語言和Java平臺(tái)(即JavaSE, JavaEE, JavaME)的總稱。Java 技術(shù)具有卓越的通用性、高效性、平臺(tái)移植性和安全性,廣泛應(yīng)用于個(gè)人PC、數(shù)據(jù)中心、游戲控制臺(tái)、科學(xué)超級(jí)計(jì)算機(jī)、移動(dòng)電話和互聯(lián)網(wǎng),同時(shí)擁有全球最大的開發(fā)者專業(yè)社群。在全球云計(jì)算和移動(dòng)互聯(lián)網(wǎng)的產(chǎn)業(yè)環(huán)境下,Java更具備了顯著優(yōu)勢和廣闊前景。 工程概況一般來說,聊天工具大多數(shù)由客戶端和服務(wù)器程序外加服務(wù)器端用于存放客戶數(shù)據(jù)的數(shù)據(jù)庫組成,本系統(tǒng)采用客戶機(jī)/服務(wù)器架構(gòu)模式通過Java提供的Socket類來鏈接客戶機(jī)和服務(wù)器并使客戶機(jī)和服務(wù)器之間相互通信,由于聊天是多點(diǎn)的,而Ja

4、va提供的多線程功能用多線程可完成多點(diǎn)的聊天。本系統(tǒng)建立在JAVA平臺(tái)上,系統(tǒng)的設(shè)計(jì)使用了面向?qū)ο蠹夹g(shù)和面向?qū)ο蟮脑O(shè)計(jì)原則。使用JAVA語言編寫,開發(fā)工具采用Eclipse。服務(wù)器設(shè)計(jì)與實(shí)現(xiàn)過程中,采用了多線程技術(shù),可以在單個(gè)程序中同時(shí)運(yùn)用多個(gè)不同的線程,執(zhí)行不同的任務(wù)。大大增強(qiáng)了程序?qū)Ψ?wù)器資源的利用,正文2.1課程任務(wù)及要求課程設(shè)計(jì)可選用Eclipse等作為開發(fā)平臺(tái)以提高開發(fā)效率,盡可能熟練掌握其中一種集成開發(fā)環(huán)境。建議采用UML建模技術(shù)進(jìn)行系統(tǒng)的分析設(shè)計(jì),在Visio中畫出系統(tǒng)用例圖和類圖,并將UML圖復(fù)制到設(shè)計(jì)報(bào)告中。通過這次設(shè)計(jì),要求掌握以下內(nèi)容:1)面向?qū)ο蠹夹g(shù)中的繼承與多態(tài)(重載

5、和覆蓋)機(jī)制、各種修飾符的使用2)類、包、接口的定義與使用3)常用工具類與算法的實(shí)現(xiàn)(數(shù)組、向量、字符串、鏈表)4)Java常用標(biāo)準(zhǔn)GUI組件及其事件處理5)Java的異常處理機(jī)制6)Java的數(shù)據(jù)庫連接技術(shù)7)Java的多線程技術(shù)8)Java的網(wǎng)絡(luò)編程課程設(shè)計(jì)選題:局域網(wǎng)聊天程序的設(shè)計(jì)與實(shí)現(xiàn)開發(fā)工具:Eclipse2.2選題意義局域網(wǎng)聊天軟件,除了能加強(qiáng)網(wǎng)絡(luò)之間的信息溝通外,最主要的是可以將網(wǎng)站信息與聊天用戶緊密聯(lián)系在一起。通過網(wǎng)站信息向聊天用戶群及時(shí)群發(fā)送,可以迅速吸引聊天用戶群對(duì)網(wǎng)站的關(guān)注,從而加強(qiáng)網(wǎng)站的訪問率與回頭率。局域網(wǎng)聊天軟件利用的是互聯(lián)網(wǎng)線路,通過文字、語音、視頻、文件的信息交

6、流與互動(dòng),有效節(jié)省了溝通雙方的時(shí)間與經(jīng)濟(jì)成本;局域網(wǎng)聊天軟件不但成為人們的溝通工具,還成為了人們利用其進(jìn)行電子商務(wù)、工作、學(xué)習(xí)等交流的平臺(tái),將日常辦公的傳統(tǒng)溝通方式替換,有效的減少辦公費(fèi)用的同時(shí),較之更有效率百分之一。2.3 程序需求分析2.3.1可行性分析經(jīng)濟(jì)可行性:由于本系統(tǒng)的主要背景是課程設(shè)計(jì),不注重直接的經(jīng)濟(jì)效益和其后的發(fā)展方向,只在注重自身水平和能力的提高,對(duì)自身的經(jīng)濟(jì)要求也不高,只要有一臺(tái)能運(yùn)行Java軟件的電腦便可,所以不用考慮到經(jīng)濟(jì)問題。技術(shù)可行性:本系統(tǒng)使用Java作為系統(tǒng)開發(fā)的開發(fā)環(huán)境,它提供完善的指令控制語句、類與對(duì)象的支持及豐富的數(shù)據(jù)類型,給開發(fā)高性能系統(tǒng)提供的保障為開

7、發(fā)滿足客戶要求的系統(tǒng),保證了代碼的模塊化要求,而代碼模塊化的提高,非常有利于以后對(duì)新系統(tǒng)的擴(kuò)展與修改。運(yùn)行可行性: 本系統(tǒng)為一個(gè)小型的局域網(wǎng)聊天系統(tǒng),所耗費(fèi)的資源非常的小,現(xiàn)在一般的電腦無論是硬件還是軟件都能夠滿足條件,因此,本系統(tǒng)在運(yùn)行上是可行的。綜上所述,本系統(tǒng)的設(shè)計(jì)與開發(fā)在技術(shù)上和硬件設(shè)備上的條件都是滿足的,因此,它在技術(shù)上是可行的。2.3.2 服務(wù)器端服務(wù)器端主要是為各個(gè)客戶端建立相互的聯(lián)系。在服務(wù)器端建立起來后,客戶端可以通過搜尋服務(wù)器端的IP地址和服務(wù)器端的端口地址和服務(wù)器建立聯(lián)系。在服務(wù)器啟動(dòng)的過程中,服務(wù)器會(huì)在該主機(jī)上監(jiān)聽一個(gè)網(wǎng)絡(luò)端口專門為該程序服務(wù),不斷監(jiān)聽是否有客戶端通過這

8、個(gè)端口請(qǐng)求與服務(wù)器建立聯(lián)系。在建立聯(lián)系的過程中,需要客戶端輸入自己的昵稱,服務(wù)器端會(huì)自動(dòng)檢測是否出現(xiàn)客戶端重名的情況;然后在客戶端輸入服務(wù)器端的IP地址和該地址的主機(jī)端口。各個(gè)客戶端在齊界面中輸入聊天內(nèi)容,通過服務(wù)器的轉(zhuǎn)發(fā),其他各個(gè)客戶端都可以收到該客戶端的信息;當(dāng)客戶端關(guān)閉時(shí),服務(wù)器端會(huì)提示客戶端退出。在服務(wù)器端要實(shí)現(xiàn)的功能:1)建立專用的網(wǎng)絡(luò)端口;2)不斷的監(jiān)聽建立的端口;3)與客戶端建立聯(lián)系;4)與客戶端建立輸入輸出流管道;5)可以與客戶端互相發(fā)送信息;6)處理用戶注冊;7)處理用戶退出;2.3.3 客戶端客戶端是為每一個(gè)用戶建立一個(gè)聊天的界面,單獨(dú)的客戶端是無法運(yùn)行的,必須與服務(wù)器端建

9、立聯(lián)系,客戶端才能正常使用。在與服務(wù)器端建立聯(lián)系的時(shí)候,需要輸入客戶端的昵稱(用于區(qū)別各個(gè)用戶),服務(wù)器端的IP地址,和該地址下的服務(wù)器端的端口,只有服務(wù)器端確認(rèn)了客戶端的連接并且顯示正常,客戶端才能與服務(wù)器端進(jìn)行信息交互;在連接成功后,用戶可以直接在客戶界面直接輸入消息,通過服務(wù)器把消息發(fā)送到其他客戶端;如果服務(wù)器端關(guān)閉,客戶端在發(fā)送消息時(shí),會(huì)提示“服務(wù)器已關(guān)閉,發(fā)送失敗”;當(dāng)客戶端退出時(shí),會(huì)提示服務(wù)器端本客戶端已退出。在客戶端需要實(shí)現(xiàn)的功能:1)可以輸入服務(wù)器端的IP地址以及對(duì)應(yīng)端口;2)可以與服務(wù)器端進(jìn)行信息交互;3)與服務(wù)器端建立輸入輸出流管道。2.4 算法設(shè)計(jì)2.4.1 UML圖如下

10、:下圖(圖一)為局域網(wǎng)聊天系統(tǒng)的總體結(jié)構(gòu),已經(jīng)大概的把服務(wù)器端和客戶端所要實(shí)現(xiàn)的功能都體現(xiàn)了出來。服務(wù)器端的主要功能是:啟動(dòng)服務(wù)器,停止服務(wù)器,發(fā)送信息,接收信息。客戶端的主要功能是:建立連接,斷開連接,發(fā)送信息,接收信息。圖一 系統(tǒng)總體結(jié)構(gòu)2.4.2 C/S模式套接字的連接在系統(tǒng)實(shí)現(xiàn)信息傳輸時(shí),服務(wù)器端和客戶端通過輸入輸出流套接實(shí)現(xiàn),在客戶端建立輸入流和輸出流管道,在服務(wù)器端也建立相應(yīng)的輸入輸出流管道,這樣就可以通過JAVA軟件實(shí)現(xiàn)文字信息交互。通過這種C/S模式,可以很好的提高系統(tǒng)的各項(xiàng)性能。2.4.3 文字聊天的實(shí)現(xiàn)在系統(tǒng)實(shí)現(xiàn)文字聊天時(shí),首先,服務(wù)器啟動(dòng),并監(jiān)測分配的主機(jī)端口號(hào);客戶端在

11、啟動(dòng)時(shí),會(huì)提示用戶輸入服務(wù)器端的IP地址和固定端口,只有兩者都輸入正確,客戶端與服務(wù)器端才能正確連接;在客戶端輸入信息后,通過C/S模式的套接字連接方法實(shí)現(xiàn)文字聊天。2.5 程序設(shè)計(jì)與實(shí)現(xiàn)2.5.1建立連接建立連接前,需要先啟動(dòng)服務(wù)器端,使服務(wù)器端對(duì)分配的固定端口進(jìn)行循環(huán)監(jiān)聽;客戶端啟動(dòng)時(shí),要手動(dòng)輸入服務(wù)器端的IP地址和對(duì)應(yīng)的固定端口,輸入正確后才能建立連接;流程圖如下(圖二):服務(wù)器端客戶端開啟服務(wù),等待連接連接成功,可以通訊建立連接圖二 連接示意圖主要代碼如下:(1) 服務(wù)器端 public class ChatServer:i. 啟動(dòng)服務(wù)器 public void start()ss =

12、 new ServerSocket(6543);onStart = true;System.out.println("服務(wù)器已成功啟動(dòng)!");ii. 客戶端連接 public void start()while(onStart) Socket s = ss.accept();Client c = new Client(s);clients.add(c);new Thread(c).start();System.out.println("一個(gè)客戶端成功連接!");(2) 客戶端 public class ChatClient extends JFrame:

13、System.out.print("請(qǐng)輸入你的昵稱:");myName = scan.readLine();System.out.print("請(qǐng)輸入服務(wù)器的ip:(直接回車默認(rèn)本機(jī))");ip = scan.readLine();2.5.2斷開連接斷開連接有兩種方法:一是,客戶端正常退出,在服務(wù)器端會(huì)顯示客戶端退出;二是,服務(wù)器端可以主動(dòng)關(guān)閉,客戶端不會(huì)立即顯示服務(wù)器關(guān)閉,會(huì)在客戶端發(fā)送下一條信息時(shí)提示用戶服務(wù)器端已經(jīng)關(guān)閉;服務(wù)器端的主動(dòng)關(guān)閉是非法的,所以要盡量的避免服務(wù)器的主動(dòng)關(guān)閉流程圖如下(圖三):斷開連接斷開服務(wù),連接斷開連接結(jié)束服務(wù)器端客戶端圖

14、三 斷開連接示意圖圖主要代碼如下:setText("服務(wù)器已斷開","System");try if(dos != null)dos.close();if(s != null)s.close(); catch(Exception e11) System.out.println("關(guān)閉連接出錯(cuò)!");2.5.3 C/S模式套接字的連接信息的傳遞是通過客戶端與服務(wù)器端的輸入輸出流通道將信息通過TCP/IP協(xié)議打包傳輸,在客戶端輸入信息,通過JAVA的文字監(jiān)控,將信息打包,通過管道傳輸;在客戶端將信息發(fā)送出去后,服務(wù)器端會(huì)將信息發(fā)送至其他各

15、個(gè)客戶端;各個(gè)客戶端收到信息后,會(huì)在其界面顯示其他客戶端發(fā)送的信息,格式為“用戶名:信息”;流程圖如下(圖四):服務(wù)器端客戶端ServerSocket serverServer.accpet()等待客戶Socket client定義客戶端的套接字DataInputStreamDataOutputStreamDataInputStreamDataOutputStreamServer.close()關(guān)閉套接字連接Client.close()關(guān)閉套接字連接圖四 C/S模式套接主要代碼:i. 服務(wù)器端public Client(Socket s):public Client(Socket s) thi

16、s.s = s;try dis = new DataInputStream(s.getInputStream();dos = new DataOutputStream(s.getOutputStream();onConnect = true; catch (IOException e) / TODO Auto-generated catch blocke.printStackTrace();public void send(String str) try dos.writeUTF(str); catch (IOException e) / TODO Auto-generated catch b

17、locke.printStackTrace();ii. 客戶端public void setText(String str1,String str2):public void setText(String str1,String str2) String s = ""if(str2.equals("System") /如果是系統(tǒng)提示,則加上"系統(tǒng)提示:"s = textArea.getText();s += "系統(tǒng)提示:" + str1 + "rn"textArea.setText(s); el

18、se /其他的,什么都不加s = textArea.getText();s += str1 + "rn"textArea.setText(s); 2.6程序測試與分析2.6.1啟動(dòng)服務(wù)器為了能夠?qū)崿F(xiàn)各個(gè)客戶端之間能夠?qū)崿F(xiàn)信息的交互,所以需要有服務(wù)器端作為信息的中轉(zhuǎn),同時(shí),有了服務(wù)器的存在,也可以使得客戶端的數(shù)量大大增加,并且使得系統(tǒng)等性能大幅度提高;實(shí)際測試結(jié)果如下圖(圖五):圖五 服務(wù)器啟動(dòng)2.6.2啟動(dòng)客戶端在啟動(dòng)客戶端的時(shí)候,需要輸入用戶自己的昵稱,和服務(wù)器端的IP地址,服務(wù)器端的端口號(hào)在程序當(dāng)中就已經(jīng)實(shí)現(xiàn)了,所以不用輸入端口號(hào);這個(gè)界面沒有做出圖形界面,只是需要在終

19、端窗口中輸入。實(shí)際測試結(jié)果如下(圖六):圖六 客戶端啟動(dòng)2.6.3成功啟動(dòng)客戶端在客戶端啟動(dòng)時(shí),如果輸入的服務(wù)器IP地址正確,客戶端的界面會(huì)跳出,而且服務(wù)器端也會(huì)提示有新的客戶端成功連接;當(dāng)顯示客戶端成功連接后,客戶端才能與服務(wù)器端正常的進(jìn)行信息交互。實(shí)際測試結(jié)果如下(圖七)圖七 客戶服務(wù)器成功連接2.6.4聊天過程在聊天過程中,用戶只要在客戶端輸入信息,點(diǎn)擊發(fā)送,信息就會(huì)通過客戶端與服務(wù)器端之間的輸入輸出流通道發(fā)送至服務(wù)器端,然后由服務(wù)器端發(fā)送至其余的各個(gè)客戶端。在發(fā)送信息的過程中,每個(gè)客戶端都會(huì)顯示這條信息是哪一個(gè)客戶端發(fā)送的,經(jīng)過測試,延遲很低,即時(shí)性很好。實(shí)際的測試結(jié)果如下圖(圖八):

20、圖八 聊天過程2.6.5 斷開連接服務(wù)器端與客戶端之間斷開連接有兩種方式:一是客戶端主動(dòng)關(guān)閉,服務(wù)器端會(huì)顯示“一個(gè)客戶端已退出”,這樣退出不會(huì)引起其他客戶端的正常聊天;二是服務(wù)器端主動(dòng)關(guān)閉,這時(shí),客戶端不會(huì)顯示服務(wù)器端關(guān)閉,只有在客戶端發(fā)送下一條信息時(shí),系統(tǒng)才會(huì)提示服務(wù)器端已經(jīng)關(guān)閉,這種斷開連接的方式需要盡量的避免,因?yàn)橐坏┓?wù)器端關(guān)閉,各個(gè)客戶端就不能繼續(xù)進(jìn)行信息交互。這種斷開連接的方式是非法的。實(shí)際的測試結(jié)果如下圖(圖九):圖九 客戶服務(wù)器斷開連接2.7課程設(shè)計(jì)小結(jié)通過這個(gè)聊天系統(tǒng)的設(shè)計(jì),雖然很努力的去做,但是還是有些地方做的不好;例如:沒有把客戶端啟動(dòng)時(shí)輸入昵稱和服務(wù)器端IP地址的界面做

21、成用戶圖形界面,使得系統(tǒng)的美觀有所下降;另外,在服務(wù)器端主動(dòng)退出時(shí),客戶端不能及時(shí)的檢測到服務(wù)器端的關(guān)閉,需要在發(fā)送下一條信息時(shí)才能檢測到;這使得客戶端一直處在阻塞狀態(tài)。這個(gè)系統(tǒng)也有較多的亮點(diǎn)。例如:在建立服務(wù)器端的時(shí)候,不用建立與數(shù)據(jù)庫的聯(lián)系,使得服務(wù)器端的程序比較簡單,通用性也更強(qiáng);系統(tǒng)采用C/S客戶服務(wù)器的模式,使得系統(tǒng)的吞吐量大大增加,同時(shí),也可以接受更多的客戶端連接。參考文獻(xiàn)1 耿祥義JAVA大學(xué)實(shí)用教程實(shí)驗(yàn)指導(dǎo).M.北京.電子工業(yè)出版社 20052 張廣彬,孟紅蕊,Java課程設(shè)計(jì)案例精編.M.北京.清華大學(xué)出版社 20073 黃曉東.Java課程設(shè)計(jì)案例精編(第一版).M.北京.

22、中國水利水電出版社 20044 黃明等,梁旭,周紹斌.Java課程設(shè)計(jì).M.北京.電子工業(yè)出版社 20065 楊昭.二級(jí)Java語言程序設(shè)計(jì)教程.M.北京.中國水利水電出版社 20066 趙毅主.跨平臺(tái)程序設(shè)計(jì)語言Java.M.西安. 西安電子科技大學(xué)出版社20067王路群.Java高級(jí)程序設(shè)計(jì).M.北京. 中國水利水電出版社 2006課程設(shè)計(jì)總結(jié)經(jīng)過這次課程設(shè)計(jì),我對(duì)Java又有了一定地深入了解,這次我選的題目是局域網(wǎng)聊天程序的實(shí)現(xiàn),涉及的編程知識(shí)不是太多,主要就是Java網(wǎng)絡(luò)編程那一塊。一開始拿到這個(gè)題目,其實(shí)并不知道如何下手,因?yàn)橐郧安]有做過此類的程序設(shè)計(jì),對(duì)網(wǎng)絡(luò)編程這一塊的認(rèn)識(shí)也相對(duì)

23、較少。為了寫好程序,我開始去圖書館看相關(guān)的書籍,了解到利用套接字可以進(jìn)行網(wǎng)絡(luò)通訊相關(guān)的編程,知道了C/S模式下的局域網(wǎng)聊天程序的方式及其實(shí)現(xiàn)形式。知道了要建立網(wǎng)絡(luò)通訊連接,首先服務(wù)器要?jiǎng)?chuàng)建一個(gè)服務(wù)器的套接字,然后用accept()方法等待客戶端的連接,客戶端也創(chuàng)建一個(gè)客戶端套接字,并通過服務(wù)器的IP地址和端口號(hào)連接服務(wù)器,再建立連接之后,就要定義兩端的輸入輸出流,然后依據(jù)一定的協(xié)議進(jìn)行數(shù)據(jù)傳輸,最后要注意關(guān)閉各自的套接字。整個(gè)C/S模式的局域網(wǎng)通訊方式就是這樣。這次我寫的程序相對(duì)簡單,只實(shí)現(xiàn)了服務(wù)器和客戶端的連接通訊,老師也覺得這個(gè)程序太簡單了,確實(shí)簡單了些,不過我也嘗試過客戶端與客戶端的連接

24、,但是似乎線程這一塊的程序我并沒有寫好,總是報(bào)錯(cuò),于是我變舍棄了客戶端與客戶端連接的實(shí)現(xiàn),雖然課程設(shè)計(jì)結(jié)束了,但是我的Java之路還長,我會(huì)利用暑假時(shí)間好好補(bǔ)習(xí)一下,好好完善我的程序??偟膩碚f,這次課程設(shè)計(jì)的收獲還是很大的,尤其在網(wǎng)絡(luò)編程,和線程的使用這一塊,學(xué)到了很多,自己對(duì)Java的興趣也是越開越濃,希望在今后的學(xué)習(xí)中,自己能夠取得不斷的進(jìn)步,讓自己的大學(xué)變的充實(shí)而又精彩。致謝本課題在選題及進(jìn)行過程中得到高老師的悉心指導(dǎo)。過程中,高老師多次幫助我分析思路,開拓視角,在我遇到困難想放棄的時(shí)候給予我最大的支持和鼓勵(lì)。高老師嚴(yán)謹(jǐn)求實(shí)的治學(xué)態(tài)度,踏實(shí)堅(jiān)韌的工作精神,將使我終生受益。再多華麗的言語也

25、顯蒼白。在此,謹(jǐn)向高老師致以誠摯的謝意和崇高的敬意。     感謝這一段時(shí)間來所有老師對(duì)我學(xué)習(xí)上的幫助和生活上的關(guān)懷,正是您們的辛勤工作,才使我得以順利地完成此次課程設(shè)計(jì)。濃濃師恩,終生不忘。     感謝班級(jí)里的所有同學(xué),正是有你們的幫助才能讓我更好的完成了此次課設(shè),有你們真好,一生的友誼,永不會(huì)忘。附錄1. 服務(wù)器代碼package com.chat;import .*;import java.util.Vector;import java.io.*;public class ChatServer Server

26、Socket ss = null;boolean onStart = false;Vector<Client> clients = new Vector<ChatServer.Client>();public static void main(String args) new ChatServer().start();public void start() try ss = new ServerSocket(6543);onStart = true;System.out.println("服務(wù)器已成功啟動(dòng)!"); catch(BindExceptio

27、n e) System.out.println("端口使用中!"); catch (Exception e1) e1.printStackTrace();try while(onStart) Socket s = ss.accept();Client c = new Client(s);clients.add(c);new Thread(c).start();System.out.println("一個(gè)客戶端成功連接!"); catch(Exception e) try ss.close(); catch (IOException e1) / TODO

28、Auto-generated catch blocke1.printStackTrace();e.printStackTrace();class Client implements Runnable private Socket s = null;private DataInputStream dis = null;private boolean onConnect = false;private DataOutputStream dos = null;public Client(Socket s) this.s = s;try dis = new DataInputStream(s.getI

29、nputStream();dos = new DataOutputStream(s.getOutputStream();onConnect = true; catch (IOException e) / TODO Auto-generated catch blocke.printStackTrace();public void send(String str) try dos.writeUTF(str); catch (IOException e) / TODO Auto-generated catch blocke.printStackTrace();Overridepublic void

30、run() / TODO Auto-generated method stubString str = ""while(onConnect) try str = dis.readUTF();System.out.println(str);for(int i = 0;i < clients.size();i +) Client c = clients.get(i);if(c.onConnect = false) clients.remove(c); else if(c != this) c.send(str);System.out.println("a mas

31、sage is sended!"); catch (SocketException e) / TODO Auto-generated catch blockSystem.out.println("一個(gè)客戶端已退出!");onConnect = false;/e.printStackTrace(); catch (Exception e) try if(dis != null) dis.close();dis = null;if(dos != null) dos.close();dos = null;if(s != null) s.close();s = null;

32、 catch(Exception e1) System.out.println("關(guān)閉連接出錯(cuò)!");/e.printStackTrace();2. 客戶端代碼package com.chat;import java.awt.*;import java.io.*;import .*;import javax.swing.*;import java.util.*;import java.awt.event.*;public class ChatClient extends JFrame TextArea textArea;TextField textField;JButton

33、 send_btn;JPanel intput_send_panel;String myName = "Chat-00"String ip = ""Socket s = null;DataOutputStream dos = null;DataInputStream dis = null;boolean onConnect = false;JPanel input_Name_Panel;TextField text_Name;JButton name_btn;public ChatClient() BufferedReader scan

34、 = new BufferedReader(new InputStreamReader(System.in);try System.out.print("請(qǐng)輸入你的昵稱:");myName = scan.readLine();System.out.print("請(qǐng)輸入服務(wù)器的ip:(直接回車默認(rèn)本機(jī))");ip = scan.readLine(); catch (IOException e2) / TODO Auto-generated catch blockSystem.out.println("輸入錯(cuò)誤!"); finally t

35、ry scan.close();scan = null; catch (IOException e1) / TODO Auto-generated catch blocke1.printStackTrace();textArea = new TextArea();textField = new TextField(30);send_btn = new JButton("發(fā)送");send_btn.addActionListener(new ActionListener() Overridepublic void actionPerformed(ActionEvent e)

36、/ TODO Auto-generated method stubif(textField.getText().equals("") = false) try dos.writeUTF(textField.getText();setText(myName + ":" + textField.getText();/setText("發(fā)送成功","System"); catch(Exception e1) setText("服務(wù)器已斷開","System");try if(dos

37、 != null)dos.close();if(s != null)s.close(); catch(Exception e11) System.out.println("關(guān)閉連接出錯(cuò)!"););textField.addActionListener(new ActionListener() Overridepublic void actionPerformed(ActionEvent e) / TODO Auto-generated method stubif(textField.getText().equals("") = false) try do

38、s.writeUTF(myName + ":" + textField.getText();setText(textField.getText();/setText("發(fā)送成功","System"); catch(Exception e1) setText("服務(wù)器已斷開","System");try if(dos != null)dos.close();if(s != null)s.close(); catch(Exception e11) System.out.println("關(guān)

39、閉連接出錯(cuò)!"););textArea.setEditable(false);put_send_panel = new JPanel();put_send_panel.add(textField);put_send_panel.add(send_btn);this.add(textArea);this.add(put_send_panel,BorderLayout.SOUTH);this.setBounds(200, 200, 400, 300);this.setVisible(true);this.setTitle("在線聊天系統(tǒng) - " + myName);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.connect();public static

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論