計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)報(bào)告書4542816318_第1頁
計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)報(bào)告書4542816318_第2頁
計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)報(bào)告書4542816318_第3頁
計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)報(bào)告書4542816318_第4頁
計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)報(bào)告書4542816318_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、薁蚆羈聿蕆蚅膀芄蒃蚄袀膇荿蚃羂莂蚈螞肄膅薄蟻膇莁蒀蟻袆膄莆螀罿荿節(jié)蝿肁膂薀螈螁莇薆螇羃芀蒂螆肅蒆莈螅膈羋蚇螅袇肁薃螄罿芇葿袃肂肀蒞袂螁芅芁袁襖肈蝕袀肆莃薆衿膈膆蒂衿袈莂莈袈羀膄蚆袇肅莀薂羆膅膃蒈羅裊莈莄薂肇膁莀薁腿蒆蠆薀衿艿薅蕿羈蒅蒁薈肅羋莇薇膆肀蚅蚇裊芆薁蚆羈聿蕆蚅膀芄蒃蚄袀膇荿蚃羂莂蚈螞肄膅薄蟻膇莁蒀蟻袆膄莆螀罿荿節(jié)蝿肁膂薀螈螁莇薆螇羃芀蒂螆肅蒆莈螅膈羋蚇螅袇肁薃螄罿芇葿袃肂肀蒞袂螁芅芁袁襖肈蝕袀肆莃薆衿膈膆蒂衿袈莂莈袈羀膄蚆袇肅莀薂羆膅膃蒈羅裊莈莄薂肇膁莀薁腿蒆蠆薀衿艿薅蕿羈蒅蒁薈肅羋莇薇膆肀蚅蚇裊芆薁蚆羈聿蕆蚅膀芄蒃蚄袀膇荿蚃羂莂蚈螞肄膅薄蟻膇莁蒀蟻袆膄莆螀罿荿節(jié)蝿肁膂薀螈螁莇薆螇羃芀

2、蒂螆肅蒆莈螅膈羋蚇螅袇肁薃螄罿芇葿袃肂肀蒞袂螁芅芁袁襖肈蝕袀肆莃薆衿膈膆蒂衿袈莂莈袈羀膄蚆袇肅莀薂羆膅膃蒈羅裊莈莄薂肇膁莀薁腿蒆蠆薀衿艿薅蕿羈蒅蒁薈肅羋莇薇膆肀蚅蚇裊芆薁蚆羈聿蕆蚅膀芄蒃蚄袀膇荿蚃羂莂蚈螞肄膅薄蟻膇莁蒀蟻袆膄莆螀罿荿節(jié)蝿肁膂薀螈螁莇薆螇羃芀蒂螆肅蒆莈螅膈羋蚇螅袇肁薃螄罿芇葿袃肂肀蒞袂螁芅芁袁襖肈蝕袀肆莃薆衿膈膆蒂衿袈莂莈袈羀膄蚆袇肅莀薂羆膅膃蒈羅裊莈莄薂肇膁莀薁腿蒆蠆薀衿艿薅蕿羈蒅蒁薈肅羋莇薇膆肀蚅蚇裊芆薁蚆羈聿蕆蚅膀芄蒃蚄袀膇荿蚃羂莂蚈螞肄膅薄蟻膇莁蒀蟻袆膄莆螀罿荿節(jié)蝿肁膂薀螈螁莇薆螇羃芀蒂螆肅蒆莈螅膈羋蚇螅袇肁薃螄罿芇葿袃肂肀蒞袂螁芅芁袁襖肈蝕袀肆莃薆衿膈膆蒂衿袈莂莈袈羀膄

3、蚆袇肅莀薂羆膅膃蒈羅裊莈莄薂肇膁莀薁腿蒆蠆薀衿艿薅蕿羈蒅蒁薈肅羋莇薇膆肀蚅蚇裊芆薁蚆羈聿蕆蚅膀芄蒃蚄袀膇荿蚃羂莂蚈螞肄膅薄蟻膇莁蒀蟻袆膄莆螀罿荿節(jié)蝿肁膂薀螈螁莇薆螇羃芀蒂螆肅蒆莈螅膈羋蚇螅袇肁薃螄罿芇葿袃肂肀蒞袂螁芅芁袁襖肈蝕袀肆莃薆衿膈膆蒂衿袈莂莈袈羀膄蚆袇肅莀薂羆膅膃蒈羅裊莈莄薂肇膁莀薁腿蒆蠆薀衿艿薅蕿羈蒅蒁薈肅羋莇薇膆肀蚅蚇裊芆薁蚆羈聿蕆蚅膀芄蒃蚄袀膇荿蚃羂莂蚈螞肄膅薄蟻膇莁蒀蟻袆膄莆螀罿荿節(jié)蝿肁膂薀螈螁莇薆螇羃芀蒂螆肅蒆莈螅膈羋蚇螅袇肁薃螄罿芇葿袃肂肀蒞袂螁芅芁袁襖肈蝕袀肆莃薆衿膈膆蒂衿袈莂莈袈羀膄蚆袇肅莀薂羆膅膃蒈羅裊莈莄薂肇膁莀薁腿蒆蠆薀衿艿薅蕿羈蒅蒁薈肅羋莇薇膆肀蚅蚇裊芆薁蚆羈聿

4、蕆蚅膀芄蒃蚄袀膇荿蚃羂莂蚈螞肄膅薄蟻膇莁蒀蟻袆膄莆螀罿荿節(jié)蝿肁膂薀螈螁莇薆螇羃芀蒂螆肅蒆莈螅膈羋蚇螅袇肁薃螄罿芇葿袃肂肀蒞袂螁芅芁袁襖肈蝕袀肆莃薆衿膈膆蒂衿袈莂莈袈羀膄蚆袇肅莀薂羆膅膃蒈羅裊莈莄薂肇膁莀薁腿蒆蠆薀衿艿薅蕿羈蒅蒁薈肅羋莇薇膆肀蚅蚇裊芆薁蚆羈聿蕆蚅膀芄蒃蚄袀膇荿蚃羂莂蚈螞肄膅薄蟻膇莁蒀蟻袆膄莆螀罿荿節(jié)蝿肁膂薀螈螁莇薆螇羃芀蒂螆肅蒆莈螅膈羋蚇螅袇肁薃螄罿芇葿袃肂肀蒞袂螁芅芁袁襖肈蝕袀肆莃薆衿膈膆蒂衿袈莂莈袈羀膄蚆袇肅莀薂羆膅膃蒈羅裊莈莄薂肇膁莀薁腿蒆蠆薀衿艿薅蕿羈蒅蒁薈肅羋莇薇膆肀蚅蚇裊芆薁蚆羈聿蕆蚅膀芄蒃蚄袀膇荿蚃羂莂蚈螞肄膅薄蟻膇莁蒀蟻袆膄莆螀罿荿節(jié)蝿肁膂薀螈螁莇薆螇羃芀蒂螆肅蒆

5、莈螅膈羋蚇螅袇肁薃螄罿芇葿袃肂肀蒞袂螁芅芁袁襖肈蝕袀肆莃薆衿膈膆蒂衿袈莂莈袈羀膄蚆袇肅莀薂羆膅膃蒈羅裊莈莄薂肇膁莀薁腿蒆蠆薀衿艿薅蕿羈蒅蒁薈肅羋莇薇膆肀蚅蚇裊芆薁蚆羈聿蕆蚅膀芄蒃蚄袀膇荿蚃羂莂蚈螞肄膅薄蟻膇莁蒀蟻袆膄莆螀罿荿節(jié)蝿肁膂薀螈螁莇薆螇羃芀蒂螆肅蒆莈螅膈羋蚇螅袇肁薃螄罿芇葿袃肂肀蒞袂螁芅芁袁襖肈蝕袀肆莃薆衿膈膆蒂衿袈莂莈袈羀膄蚆袇肅莀薂羆膅膃蒈羅裊莈莄薂肇膁莀薁腿蒆蠆薀衿艿薅蕿羈蒅蒁薈肅羋莇薇膆肀蚅蚇裊芆薁蚆羈聿蕆蚅膀芄蒃蚄袀膇荿蚃羂莂蚈螞肄膅薄蟻膇莁蒀蟻袆膄莆螀罿荿節(jié)蝿肁膂薀螈螁莇薆螇羃芀蒂螆肅蒆莈螅膈羋蚇螅袇肁薃螄罿芇葿袃肂肀蒞袂螁芅芁袁襖肈蝕袀肆莃薆衿膈膆蒂衿袈莂莈袈羀膄蚆袇肅莀

6、薂羆膅膃蒈羅裊莈莄薂肇膁莀薁腿蒆蠆薀衿艿薅蕿羈蒅蒁薈肅羋莇薇膆肀蚅蚇裊芆薁蚆羈聿蕆蚅膀芄蒃蚄袀膇荿蚃羂莂蚈螞肄膅薄蟻膇莁蒀蟻袆膄莆螀罿荿節(jié)蝿肁膂薀螈螁莇薆螇羃芀蒂螆肅蒆莈螅膈羋蚇螅袇肁薃螄罿芇葿袃肂肀蒞袂螁芅芁袁襖肈蝕袀肆莃薆衿膈膆蒂衿袈莂莈袈羀膄蚆袇肅莀薂羆膅膃蒈羅裊莈莄薂肇膁莀薁腿蒆蠆薀衿艿薅蕿羈蒅蒁薈肅羋莇薇膆肀蚅蚇裊芆薁蚆羈聿蕆蚅膀芄蒃蚄袀膇荿蚃羂莂蚈螞肄膅薄蟻膇莁蒀蟻袆膄莆螀罿荿節(jié)蝿肁膂薀螈螁莇薆螇羃芀蒂螆肅蒆莈螅膈羋蚇螅袇肁薃螄罿芇葿袃肂肀蒞袂螁芅芁袁襖肈蝕袀肆莃薆衿膈膆蒂衿袈莂莈袈羀膄蚆袇肅莀薂羆膅膃蒈羅裊莈莄薂肇膁莀薁腿蒆蠆薀衿艿薅蕿羈蒅蒁薈肅羋莇薇膆肀蚅蚇裊芆薁蚆羈聿蕆蚅膀芄

7、蒃蚄袀膇荿蚃羂莂蚈螞肄膅薄蟻膇莁蒀蟻袆膄莆螀罿荿節(jié)蝿肁膂薀螈螁莇薆螇羃芀蒂螆肅蒆莈螅膈羋蚇螅袇肁薃螄罿芇葿袃肂肀蒞袂螁芅芁袁襖肈蝕袀肆莃薆衿膈膆蒂衿袈莂莈袈羀膄蚆袇肅莀薂羆膅膃蒈羅裊莈莄薂肇膁莀薁腿蒆蠆薀衿艿薅蕿羈蒅蒁薈肅羋莇薇膆肀蚅蚇裊芆薁蚆羈聿蕆蚅膀芄蒃蚄袀膇荿蚃羂莂蚈螞肄膅薄蟻膇莁蒀蟻袆膄莆螀罿荿節(jié)蝿肁膂薀螈螁莇薆螇羃芀蒂螆肅蒆莈螅膈羋蚇螅袇肁薃螄罿芇葿袃肂肀蒞袂螁芅芁袁襖肈蝕袀肆莃薆衿膈膆蒂衿袈莂莈袈羀膄蚆袇 學(xué) 號(hào): 武漢理工大學(xué)華夏學(xué)院課 程 設(shè) 計(jì)題 目計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)系 別信息工程專 業(yè)軟件技術(shù)班 級(jí)姓 名成 績2011年01月 13 日課程設(shè)計(jì)任務(wù)書學(xué)生姓名: 專業(yè)班級(jí):

8、題 目: 簡單的聊天軟件(c/s) 目錄一、設(shè)計(jì)目的3二、設(shè)計(jì)任務(wù)3三、時(shí)間安排3四、具體設(shè)計(jì)過程和步驟(以協(xié)議驗(yàn)證編程為例)34.1 需求分析34.1.1項(xiàng)目描述34.1.2系統(tǒng)需求44.2套接字介紹與使用44.3 流程分析與設(shè)計(jì)44.4 項(xiàng)目基本步驟54.4.1創(chuàng)建項(xiàng)目以及基本的包54.4.2創(chuàng)建項(xiàng)目的基本類54.5 編碼64.6 系統(tǒng)實(shí)施與運(yùn)行184.6.1服務(wù)器啟動(dòng)與關(guān)閉窗體視圖184.6.2客戶端產(chǎn)生視圖184.6.3服務(wù)器聊天窗口、客戶機(jī)聊天窗口184.6.4服務(wù)器與客戶機(jī)交互194.6.4 cmd模式telnet服務(wù)器進(jìn)行和交互20五、設(shè)計(jì)心得體會(huì)21六、設(shè)計(jì)過程中的疑問21七、

9、指導(dǎo)教師評(píng)語22一、 設(shè)計(jì)目的通過本課程設(shè)計(jì),培養(yǎng)學(xué)生具有c/s或b/s式的網(wǎng)絡(luò)應(yīng)用系統(tǒng)的設(shè)計(jì)和開發(fā)以及中小規(guī)模組網(wǎng)能力;掌握常用網(wǎng)絡(luò)開發(fā)工具(如vb、vc)的使用,或掌握web開發(fā)工具(如asp等)的方法與網(wǎng)絡(luò)規(guī)劃、設(shè)計(jì)、集成的步驟和方法;使同學(xué)們經(jīng)歷網(wǎng)絡(luò)應(yīng)用系統(tǒng)開發(fā)及網(wǎng)絡(luò)集成的全過程和受到一次綜合訓(xùn)練,以便能較全面地理解、掌握和綜合運(yùn)用所學(xué)的知識(shí),在實(shí)踐中培養(yǎng)分析問題和解決問題的能力。并為畢業(yè)設(shè)計(jì)打下堅(jiān)實(shí)的基礎(chǔ)。通過分析設(shè)計(jì)和實(shí)現(xiàn),可以使理論知識(shí)得到驗(yàn)證并且能夠了解基本網(wǎng)絡(luò)開發(fā)的方法、步驟,細(xì)節(jié),提高動(dòng)手能力。二、 設(shè)計(jì)任務(wù)1. 實(shí)現(xiàn)簡單的客戶端發(fā)送信息、服務(wù)器端收信息。2. 實(shí)現(xiàn)簡單的服

10、務(wù)器端發(fā)送信息、客戶端收信息3. 實(shí)現(xiàn)客戶端請(qǐng)求關(guān)閉連接,服務(wù)器作出相應(yīng)4. 編程模擬實(shí)現(xiàn)telnet5. 獲取主機(jī)名和ip地址三、 時(shí)間安排01月10日,查閱資料,確定設(shè)計(jì)題目;01月11日,分析題目,創(chuàng)建工程,準(zhǔn)備程序;01月12日,封裝代碼,上機(jī)調(diào)試程序;01月13日,提交課程設(shè)計(jì)報(bào)告;四、 具體設(shè)計(jì)過程和步驟(以協(xié)議驗(yàn)證編程為例)4.1 需求分析4.1.1項(xiàng)目描述 在信息網(wǎng)絡(luò)高速發(fā)展的今天,網(wǎng)上聊天已成為了我們每天生活、工作必不可少的一部分,如qq、飛鴿、uc等聊天工具的普及。聊天工具為我們的生活和學(xué)習(xí)帶來了很多方便,在這里我做了一個(gè)簡單的網(wǎng)絡(luò)聊天軟件神話聊天室,實(shí)現(xiàn)了一些基本的服務(wù)器

11、與客戶端的相互交流和請(qǐng)求,本項(xiàng)目編寫簡單,易于移植,交流方便。本項(xiàng)目主要實(shí)現(xiàn)的功能是利用網(wǎng)絡(luò)知識(shí)套接字(ip地址+端口號(hào)),實(shí)現(xiàn)服務(wù)器和客戶端的基本通信功能,并且服務(wù)器可以實(shí)現(xiàn)同時(shí)與多臺(tái)客戶端通信交流。本項(xiàng)目利用java知識(shí)、借助myeclipse開發(fā)平臺(tái),寫了一個(gè)服務(wù)器端和一個(gè)客戶端,可以將這個(gè)客戶端移植到別的機(jī)器上與本機(jī)實(shí)現(xiàn)多對(duì)一的交流,同時(shí)客戶端也可以在自己利用遠(yuǎn)程登陸的方式(開始運(yùn)行cmdtelnet 服務(wù)器ip 服務(wù)器端口號(hào)),與服務(wù)器進(jìn)行交流。4.1.2系統(tǒng)需求1. 問題描述利用myeclipse平臺(tái),設(shè)計(jì)出簡潔, 用戶友好的聊天界面及方便靈活的客戶端與服務(wù)器之間的交流,能完成基本

12、的一對(duì)一用戶交流、一對(duì)多用戶交流,客戶端與服務(wù)器之間的相互請(qǐng)求關(guān)閉連接的操作。該系統(tǒng)主要包括服務(wù)器端和客戶端兩部分:服務(wù)器端:利用java知識(shí)serversocket類定義一個(gè)服務(wù)器端端口new serversocket(int iport),然后不但讓服務(wù)器端端口產(chǎn)生監(jiān)聽,利用多線程知識(shí)定義一個(gè)線程類,讓每接受到一個(gè)監(jiān)聽就給服務(wù)器產(chǎn)生一個(gè)聊天窗口,直至聊天結(jié)束就關(guān)閉此窗口。客戶端:利用 java 知識(shí)socket類定義一個(gè)客戶端 端口new socket( string ip,int iport),此ip為服務(wù)器端主機(jī)的ip地址,端口號(hào)為服務(wù)器端服務(wù)器定義的端口號(hào),然后讓客戶端啟動(dòng),這樣客戶

13、端就會(huì)就請(qǐng)一次服務(wù)器,服務(wù)器接受到一個(gè)監(jiān)聽就給服務(wù)器產(chǎn)生一個(gè)與之對(duì)應(yīng)的聊天窗口,兩者進(jìn)行聊天,直至哪一方要求結(jié)束聊天就關(guān)閉窗體。2. 顯示服務(wù)器與客戶機(jī)的ip和主機(jī)名利用java中的getlocaladdress().gethostname()和getinetaddress();3. 項(xiàng)目視圖的建立 利用java se 知識(shí)采用java中swing包控件,創(chuàng)建一個(gè)啟動(dòng)服務(wù)器的窗體(見圖4)、一個(gè)啟動(dòng)客戶端的窗體(見圖6)、一個(gè)服務(wù)器端的聊天窗體(見圖8)、一個(gè)客戶端的聊天窗體(見圖8)。4.2套接字介紹與使用 多個(gè)tcp連接或多個(gè)應(yīng)用程序進(jìn)程可能需要通過同一個(gè) tcp協(xié)議端口傳輸數(shù)據(jù)。為了區(qū)別

14、不同的應(yīng)用程序進(jìn)程和連接,許多計(jì)算機(jī)操作系統(tǒng)為應(yīng)用程序與tcpip協(xié)議交互提供了稱為套接字(socket)的接口。多個(gè)tcp連接或多個(gè)應(yīng)用程序進(jìn)程可能需要通過同一個(gè) tcp協(xié)議端口傳輸數(shù)據(jù)。為了區(qū)別不同的應(yīng)用程序進(jìn)程和連接,許多計(jì)算機(jī)操作系統(tǒng)為應(yīng)用程序與tcpip協(xié)議交互提供了稱為套接字(socket)的接口。套接字簡介:套接字,是支持tcp/ip的網(wǎng)絡(luò)通信的基本操作單元,可以看做是不同主機(jī)的間的進(jìn)程進(jìn)行雙向通信的端面點(diǎn),簡單的說就是通信的兩方的一種約定,用套接字中的相關(guān)函數(shù)來完成通信過程4.3 流程分析與設(shè)計(jì)啟動(dòng)服務(wù)器serversocket ss產(chǎn)生服務(wù)器端聊天窗口產(chǎn)生監(jiān)聽socket s

15、=ss.accept()啟動(dòng)客戶端輸入服務(wù)器端主機(jī)ip+porttruefalsetruefalse產(chǎn)生客戶端聊天窗口進(jìn)行相互交流圖1 主要流程圖4.4 項(xiàng)目基本步驟4.4.1創(chuàng)建項(xiàng)目以及基本的包打開myeclipse,新建java project工程,取名為chatroom,圖2; 在src下新建包edu.huaxia.chatserver、edu.huaxia.chatclient,圖3; 圖2 圖3 4.4.2創(chuàng)建項(xiàng)目的基本類1. 創(chuàng)建啟動(dòng)服務(wù)器視圖類tcpserveview.java,代碼見4.5編碼12. 創(chuàng)建線程服務(wù)器類tcpsession.java,代碼見4.5編碼23. 創(chuàng)建服

16、務(wù)器端聊天窗口視圖類chatwindowserevrview.java,代碼見4.5編碼34. 創(chuàng)建啟動(dòng)客戶端視圖類clientview.java,代碼見4.5編碼45. 創(chuàng)建客戶端聊天窗口視圖類tcpclient.java,代碼見4.5編碼54.5 編碼1. tcpserveview.java代碼:package edu.huaxia.chatserver;import java.aw*;import java.io.ioexception;import .serversocket;import .socket;import javax.swing.*;/* * author thomas

17、*服務(wù)器端窗體:開始和停止服務(wù) */public class tcpserverview extends jframeprivate static final long serialversionuid = 1l;private serversocket ss;private jbutton start,stop;public tcpserverview()super(服務(wù)器窗體);try ss = new serversocket(6666);/給服務(wù)器綁定一個(gè)端口 catch (ioexception e1) e1.printstacktrace();start = new jbutton

18、(啟動(dòng)服務(wù)器);/開始按鈕監(jiān)聽事件啟動(dòng)服務(wù)器start.addactionlistener(new actionlistener()public void actionperformed(actionevent e) start.setvisible(false);/啟動(dòng)后設(shè)置開始按鈕不可見/如果停止按鈕是不可見時(shí),啟動(dòng)后設(shè)置停止按鈕可見if (stop.isvisible()=false) stop.setvisible(true);this.start();/調(diào)用內(nèi)部類的start方法/* * 內(nèi)部類方法,監(jiān)聽一個(gè)端口,并產(chǎn)生一個(gè)線程 */private void start() try

19、socket socket=ss.accept();new tcpsession(socket).start();/讓線程開啟 this.start(); catch (ioexception e) / todo auto-generated catch blocke.printstacktrace(););stop = new jbutton(關(guān)閉服務(wù)器);stop.setvisible(false);/最初時(shí)設(shè)置停止按鈕不見/停止按鈕監(jiān)聽事件停止服務(wù)器stop.addactionlistener(new actionlistener()public void actionperformed

20、(actionevent e) this.close();/調(diào)用內(nèi)部類的close方法/如果開始按鈕是不可見時(shí),啟動(dòng)后設(shè)置開始按鈕可見if (start.isvisible()=false) start.setvisible(true);/設(shè)置停止按鈕不可見stop.setvisible(false);/* * 內(nèi)部類方法,關(guān)閉端口 */private void close() try if(ss!=null)/如果端口不為空,就關(guān)閉該端口ss.close(); catch (ioexception e) / todo auto-generated catch blocke.printstac

21、ktrace(););this.add(start);this.add(stop);this.setlayout(null);this.setbackground(color.light_gray);this.setbounds(150, 150, 300, 300);this.setvisible(true);start.setbounds(100, 75, 100, 50);stop.setbounds(100, 155, 100, 50);public static void main(string args) /主方法,調(diào)用自己,產(chǎn)生圖形化用戶界面new tcpserverview()

22、;2. tcpsession.java代碼:package edu.huaxia.chatserver;import java.io.*;import .socket;import edu.huaxia.chatview.chatwindowserverview;/* * author thomas *對(duì)服務(wù)器產(chǎn)生的線程進(jìn)行處理 */public class tcpsession extends thread private socket socket;private bufferedreader br;private printstream ps;public tcpsession(sock

23、et s) this.socket = s;try /定義端口的輸入輸出流br=new bufferedreader(new inputstreamreader(socket.getinputstream();ps=new printstream(socket.getoutputstream(); catch (ioexception e) e.printstacktrace();/* * 流的關(guān)閉方法 */public void close()try if(br!=null) br.close();if(ps!=null) ps.close();if(socket!=null) socket

24、.close(); catch (ioexception e) / todo auto-generated catch blocke.printstacktrace();/* * 線程的啟動(dòng)方法 */public void run() /產(chǎn)生一個(gè)圖形化聊天界面chatwindowserverview cws = new chatwindowserverview(socket,br,ps);cws.dopost();/調(diào)用cws的dopost方法cws.close();/調(diào)用cws的close方法cws.dispose();/將這個(gè)聊天窗體摧毀this.close();/調(diào)用自己關(guān)閉流的方法cl

25、ose3. chatwindowserevrview.java代碼:package edu.huaxia.chatview;import java.io*;import .socket;import java.text.simpledateformat;import java.util.date;import javax.swing.*;/* * author thomas *用戶聊天窗體 */public class chatwindowserverview extends jframe implements actionlistenerprivate static final long s

26、erialversionuid = 1l;private jlabel l1,l2,l3,l4;private jpanel p1,p2,p3,p4,p5;private textarea ta1,ta2;private jbutton send,quit;private bufferedreader br;private printstream ps;private boolean b=true;/* * 構(gòu)造器對(duì)窗體屬性的基本定義 */public chatwindowserverview(socket socket,bufferedreader br,printstream ps)sup

27、er(神話聊天室服務(wù)器);this.br=br;this.ps=ps;l1 = new jlabel(客戶ip:+socket.getlocaladdress();l3 = new jlabel(客戶名字:+socket.getlocaladdress().gethostname();l2 = new jlabel(主機(jī)ip:+socket.getinetaddress();l4 = new jlabel(主機(jī)名字:+socket.getinetaddress().gethostname();border b1 = borderfactory.createtitledborder(聊天信息顯示

28、窗體);border b2 = borderfactory.createtitledborder(發(fā)送信息窗體);border b3 = borderfactory.createtitledborder(對(duì)方基本信息);border b4 = borderfactory.createtitledborder(本人基本信息);p1 = new jpanel();p1.setborder(b1);p2 = new jpanel();p2.setborder(b2);p3 = new jpanel();p3.setborder(b3);p4 = new jpanel();p4.setborder(b

29、4);p5 = new jpanel();ta1 = new textarea(10,47);ta2 = new textarea(11,67);font f = new font(default,font.plain,18);ta1.setfont(f);ta1.setforeground(color.red);send = new jbutton(發(fā)送);send.addactionlistener(this);/產(chǎn)生監(jiān)聽quit = new jbutton(關(guān)閉);quit.addactionlistener(this);/產(chǎn)生監(jiān)聽this.setlayout(null);this.ad

30、d(p1);this.add(p2);this.add(p3);this.add(p4);this.add(p5);p1.add(ta1);p2.add(ta2);p3.add(l1);p3.add(l3);p4.add(l2);p4.add(l4);p5.add(send);p5.add(quit);this.setbounds(100,100, 720, 600);p1.setbackground(color.gray);p1.setbounds(0, 0, 500, 280);p3.setbackground(color.white);p3.setbounds(505, 0, 190,

31、280);l1.setbounds(507, 5, 187, 30);l2.setbounds(507, 37, 187, 30);p2.setbackground(color.pink);p2.setbounds(0, 290, 500, 220);p4.setbackground(color.light_gray);p4.setbounds(505, 290, 190, 220);l2.setbounds(507, 295, 187, 30);l4.setbounds(507, 327, 187, 30);p5.setbounds(0, 520, 500, 40);this.setvisi

32、ble(true);/* * 對(duì)監(jiān)聽事件的處理 */public void actionperformed(actionevent e) /發(fā)送按鈕事件。當(dāng)發(fā)送文本框的值不為空時(shí),就將信息發(fā)送為輸出流,同時(shí)在信息框中打印出來if(e.getsource().equals(send) string s1=null;s1=ta2.gettext().trim();if(!s1.equals()ta2.settext();/對(duì)時(shí)間對(duì)象的處理simpledateformat sdf = new simpledateformat(yyyy-mm-dd hh:mm:ss);date date = new

33、date();/如果得到的是quit就返回方法 if(quit.equalsignorecase(s1) ta1.append(服務(wù)器+sdf.format(date)+:+要求斷開連接); ps.println(+sdf.format(date)+:+要求斷開連接); return; ps.println(+sdf.format(date)+:+s1); ta1.append(服務(wù)器+sdf.format(date)+:+s1+n); ps.flush();else if(e.getsource()=quit)/發(fā)送按鈕事件。將“quit”信息發(fā)送為/輸出流,同時(shí)將b設(shè)置為falseps.p

34、rintln(quit);b=false;/* * 接受輸入流的信息 */public void dopost()try string s=null;simpledateformat sdf = new simpledateformat(yyyy-mm-dd hh:mm:ss);date date = new date();ps.println(+sdf.format(date)+:你好,歡迎光臨神話聊天室!);while(b)s=br.readline();if(s!=null|s!=)if(quit.equalsignorecase(s) /若得到的是quit就返回ta1.append(客

35、戶+sdf.format(date)+要求斷開連接!n);return;ta1.append(客戶+s+n); catch (ioexception e) e.printstacktrace();/* * 流的關(guān)閉窗體 */public void close()try if(br!=null) br.close();if(ps!=null) ps.close(); catch (ioexception e) / todo auto-generated catch blocke.printstacktrace();4. clientview.java代碼:package edu.huaxia.c

36、hatclient;import java.awt.*;import java.io.ioexception;import .socket;import .unknownhostexception; /* * author thomas *啟動(dòng)客戶端的窗體 */public class clientview extends jframe private static final long serialversionuid = 1l;private jlabel l0,l1,l2;private jtextfield ip,port;private jbutton start;public cl

37、ientview()super(客戶端啟動(dòng));l0 = new jlabel(套接字信息);l1 = new jlabel(服務(wù)器ip:);l2 = new jlabel(服務(wù)器port:);ip = new jtextfield();port = new jtextfield();start = new jbutton(產(chǎn)生客戶端);/產(chǎn)生監(jiān)聽,實(shí)例化內(nèi)部類start.addactionlistener(new actionlistener()public void actionperformed(actionevent e) string ip1 = ip.gettext();int po

38、rt1 = integer.parseint(port.gettext();socket socket = null;try /定義套接字:ip+端口號(hào)socket = new socket(ip1,port1);tcpclient tc = new tcpclient(socket);tc.post();tc.close();tc.dispose(); catch (unknownhostexception e1) joptionpane.showmessagedialog(null, 套接字錯(cuò)誤!); catch (ioexception e3) joptionpane.showmessa

39、gedialog(null, 套接字錯(cuò)誤!);try socket.close(); catch (ioexception e1) / todo auto-generated catch blocke1.printstacktrace(););font font = new font(華文楷體,font.plain,18);l0.setfont(font);l0.setforeground(color.red);this.add(start);this.add(l0);this.add(l1);this.add(l2);this.add(ip);this.add(port);this.setl

40、ayout(null);this.setbackground(color.light_gray);this.setbounds(150, 150, 300, 300);this.setvisible(true);l0.setbounds(100, 15, 100, 30);l1.setbounds(55, 55, 60, 30);ip.setbounds(135, 55, 100, 30);l2.setbounds(55, 105, 70, 30);port.setbounds(135, 105, 100, 30);start.setbounds(100, 155, 100, 30);publ

41、ic static void main(string args) new clientview();5. tcpclient.java代碼:package edu.huaxia.chatclient;import java.awt.*;import java.io*import .socket;import .unknownhostexception;import java.text.simpledateformat;import java.util.date;import javax.swing.*;/* * author thomas * 客戶端窗體 */public class tcpc

42、lient extends jframe implements actionlistenerprivate static final long serialversionuid = 1l;private jlabel l1,l2,l3,l4;private jpanel p1,p2,p3,p4,p5;private textarea ta1,ta2;private jbutton send,quit;private bufferedreader br;private printstream ps;private socket socket;private boolean b=true;/* *

43、 客戶端窗體的基本屬性 */public tcpclient(socket socket)super(神話聊天室客戶端);this.socket = socket;try /定義套接字輸入輸出流br = new bufferedreader(new inputstreamreader(socket.getinputstream();ps = new printstream(socket.getoutputstream();catch (ioexception e) e.printstacktrace();l2 = new jlabel(客戶ip:+socket.getlocaladdress(

44、);l4 = new jlabel(客戶名字:+socket.getlocaladdress().gethostname();l1 = new jlabel(主機(jī)ip:+socket.getinetaddress();l3 = new jlabel(主機(jī)名字:+socket.getinetaddress().gethostname();border b1 = borderfactory.createtitledborder(聊天信息顯示窗體);border b2 = borderfactory.createtitledborder(發(fā)送信息窗體);border b3 = borderfacto

45、ry.createtitledborder(對(duì)方基本信息);border b4 = borderfactory.createtitledborder(本人基本信息);p1 = new jpanel();p1.setborder(b1);p2 = new jpanel();p2.setborder(b2);p3 = new jpanel();p3.setborder(b3);p4 = new jpanel();p4.setborder(b4);p5 = new jpanel();ta1 = new textarea(10,47);ta2 = new textarea(11,67);font f

46、= new font(default,font.plain,18);ta1.setfont(f);ta1.setforeground(color.red);send = new jbutton(發(fā)送);send.addactionlistener(this);/產(chǎn)生監(jiān)聽quit = new jbutton(關(guān)閉);quit.addactionlistener(this);/產(chǎn)生監(jiān)聽this.setlayout(null);this.add(p1);this.add(p2);this.add(p3);this.add(p4);this.add(p5);p1.add(ta1);p2.add(ta2

47、);p3.add(l1);p3.add(l3);p4.add(l2);p4.add(l4);p5.add(send);p5.add(quit);this.setbounds(100,100, 720, 600);p1.setbackground(color.orange);p1.setbounds(0, 0, 500, 280);p3.setbackground(color.pink);p3.setbounds(505, 0, 190, 280);l1.setbounds(507, 5, 187, 30);l2.setbounds(507, 37, 187, 30);p2.setbackgro

48、und(color.darkgray);p2.setbounds(0, 290, 500, 220);p4.setbackground(color.light_gray);p4.setbounds(505, 290, 190, 220);l2.setbounds(507, 295, 187, 30);l4.setbounds(507, 327, 187, 30);p5.setbounds(0, 520, 500, 40);this.setvisible(true);/* * 接受輸入流的信息 */public void post() try string s=null;while(b)/對(duì)時(shí)間

49、對(duì)象的處理simpledateformat sdf = new simpledateformat(yyyy-mm-dd hh:mm:ss);date date = new date();s=br.readline();if(s!=null|s!=)/如果得到的是quit就返回方法if(quit.equalsignorecase(s) ta1.append(服務(wù)器+sdf.format(date)+要求斷開連接!n);return;ta1.append(服務(wù)器+s+n); catch (unknownhostexception e) / todo auto-generated catch blocke.printstacktrace(); catch (ioexception e) / todo auto-generated catch blocke.printstacktrace();/* * 流的關(guān)閉 */public void close()try if(br!=null) br.clo

溫馨提示

  • 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)論