版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
力京信息工經(jīng)大學題目基于JAVA的網(wǎng)絡(luò)即時通訊軟件的設(shè)計和實現(xiàn)2、本論文是我個人在導(dǎo)師指導(dǎo)下進行的研究工作和取得的研究成3、本論文中除引文外,所有實驗、數(shù)據(jù)和有關(guān)材料均是真實的。4、本論文中除引文和致謝的內(nèi)容外,沒有抄襲其他人或其他機構(gòu)已經(jīng)發(fā)表或撰寫過的研究成果。5、其他同志對本研究所做的貢獻均已在論文中作了聲明并表示了 即時通訊系統(tǒng)產(chǎn)生的背景 即時通訊系統(tǒng)的現(xiàn)狀和發(fā)展 開發(fā)即時通訊系統(tǒng)的意義 22相關(guān)技術(shù) 2JAVA語言 2TCP/IP協(xié)議 3 33系統(tǒng)需求分析 4項目設(shè)計的需求描述 4項目設(shè)計的系統(tǒng)用例圖 5user注冊活動圖 user登錄活動圖 6user好友添加時序圖 7user聊天時序圖 7user語音聊天時序圖 84系統(tǒng)數(shù)據(jù)庫設(shè)計 9用戶和客戶端的關(guān)系 9用戶和登錄記錄的關(guān)系 9用戶和聊天記錄的關(guān)系 Ⅱ數(shù)據(jù)庫中表格的設(shè)計 5詳細設(shè)計 系統(tǒng)總體流程圖 系統(tǒng)客戶端流程圖 編寫服務(wù)器端程序 后臺數(shù)據(jù)庫設(shè)計 用戶注冊 用戶登陸 用戶退出 接收用戶聊天信息 客戶端程序編寫 用戶注冊 用戶登錄 聊天室實現(xiàn) 用戶發(fā)送信息 保存聊天記錄 顯示系統(tǒng)時間 屏蔽聊天信息 退出聊天系統(tǒng) 出現(xiàn)異常信息 Ⅱ7結(jié)語…………………311基于JAVA的網(wǎng)絡(luò)即時通訊軟件的設(shè)計和實現(xiàn)郝金南京信息工程大學計算機與軟件學院,南京210044摘要:本論文用Java語言編寫的一個聊天系統(tǒng)。該系統(tǒng)是基于Java平臺,系統(tǒng)采用面向?qū)ο蠹夹g(shù)和面向?qū)ο蟮脑O(shè)計原則。務(wù)器端的設(shè)計和實施過程中,使用多線程技術(shù),它可以在一個程序中同時運行多個不同的線程,執(zhí)行不同的任務(wù),大大提高服務(wù)器資源的利用率。數(shù)據(jù)庫管理系統(tǒng)用SQLServer2005完成并通過JDBC-ODBC橋訪問數(shù)據(jù)庫。聊天系統(tǒng)將完成多人互相聊天、添加、刪除好友、新用戶注冊、收發(fā)郵件、文件傳輸和語音視頻聊天。關(guān)鍵詞:網(wǎng)絡(luò),即時通信,C/S,SQL2005;即時通訊系統(tǒng)產(chǎn)生的背景電子信息技術(shù)飛速發(fā)展,它融合了計算機、通信、信息和信號處理技術(shù),使得信息飛速發(fā)展已成為一種必然趨勢。各種信息化系統(tǒng)已成為一個國家基礎(chǔ)設(shè)施,電子商務(wù)、電子政務(wù)、電子金地、科學研究、通信、交通和網(wǎng)絡(luò)教育等十分重要的領(lǐng)域都因此而有了非常大的發(fā)展。因此,推進各領(lǐng)域高速發(fā)展的必要前提是信息化建設(shè)的發(fā)展。為實現(xiàn)其投資效益的最大化,必須加快信息化建設(shè)的發(fā)展步伐,信息化工程的實易學易用、快速實施的信息化解決方案,能確保其關(guān)鍵業(yè)務(wù)和關(guān)鍵管理需求的優(yōu)先解決,并能提供足夠的擴展性來適應(yīng)其不斷增長的需要。但是傳統(tǒng)業(yè)務(wù)的各個系統(tǒng)是獨立設(shè)計的,支撐系統(tǒng)也是以滿足生產(chǎn)為目的,而如果還是完全按照傳統(tǒng)的思路進行各個系統(tǒng)的信息化建設(shè),那么即使系統(tǒng)建成,也會有較大發(fā)展,但這種發(fā)展也只是各自單獨的發(fā)展,并沒有實信息化時代信息的快速傳遞和交換形成的互促發(fā)展的特點。這顯然不符合我們希望信息資源的集成共享從而加快高度的自動化、智能化的信息化建設(shè)的初衷。所以,我們就需要變化視角,通過新的角度設(shè)計出新的技術(shù)發(fā)展方案.,重新構(gòu)建信息化建設(shè)和相關(guān)產(chǎn)業(yè)模式,才能達到實現(xiàn)便捷、多贏的目的。即時通訊系統(tǒng)應(yīng)運而生。即時通訊系統(tǒng)的現(xiàn)狀和發(fā)展即時通訊系統(tǒng)是基于Internet網(wǎng)絡(luò)及其它有線、無線網(wǎng)絡(luò)的一種非常流行的實時通信方式,是一種非常便捷的網(wǎng)絡(luò)通訊技術(shù),它用互聯(lián)網(wǎng)通過通信系統(tǒng)建立起網(wǎng)絡(luò)虛擬環(huán)境,通過計算機鍵盤或無線設(shè)備在網(wǎng)絡(luò)上進行實時交換,成為一種提供公共通訊、商務(wù)通訊及商務(wù)合作的新媒介,也彌補了傳統(tǒng)通訊形2式的不足,尤其是電子郵件及語音通信方面。隨著即時通信普及,全球即時通信用戶的數(shù)量也不斷增長。微軟公司的MSN、OICQ和雅虎公司的雅虎通,騰迅公司QQ,網(wǎng)易公司的網(wǎng)易泡泡等通信系統(tǒng)都是家喻戶曉的。除了最基本的單純的文本交流,即時通信業(yè)務(wù)增加了視頻、音頻交流等多種寬帶應(yīng)用元素,如提供視頻、語音通信服務(wù)、交流共享、短信收發(fā)、數(shù)據(jù)傳輸?shù)确?wù)項目。即時通信軟件的第二次發(fā)展浪潮來臨---基于PgP技術(shù)的多媒體和基于IP技術(shù)的通信方。即時通信業(yè)務(wù)的承載設(shè)備也將趨向于多元化。用戶可以通過手機、個人計算機、PDA等工具使用即時通信,寬帶電話、網(wǎng)絡(luò)電話業(yè)務(wù)也逐漸在即時通信的軟件上實現(xiàn)功能。開發(fā)即時通訊系統(tǒng)的意義即時通信系統(tǒng)的3大優(yōu)勢:1.功能的多樣性。如提供視頻、交流共享、語音通信服務(wù)、短信收發(fā)、數(shù)據(jù)傳輸?shù)确?wù)項目,同時也注重了安全性、健壯性。2.通信的即時性和高效性。即時通信系統(tǒng)的速度快,不管接收方的計算機處理什么樣的業(yè)務(wù),發(fā)送的消息都能很快的通知眾多的用戶,使通信更加即時有效。3.功能上較強的延伸性。例如,有些即時通信軟件可以用無線接入設(shè)備實現(xiàn)無線即時通信、直接訪問公司的數(shù)據(jù)庫、召集網(wǎng)上會議、多種語言的互譯等等。即時通信軟件是應(yīng)用軟件的一個重要的分支,構(gòu)造的成本低、實時性好、網(wǎng)上交流平臺便捷的特點決業(yè)單位信息化的建設(shè)!因此,開發(fā)及時通訊軟件也就具有了重要的意義!2相關(guān)技術(shù)JAVA語言Java是一種簡單、多線程、安全、容易適用、可移置、面向?qū)ο蟆⒏咝阅艿恼Z言。它具有如下特點:1.面向?qū)ο?。面向?qū)ο蠹夹g(shù)一次革新,它可以提高模塊化程度和重復(fù)適用率,縮短軟件開發(fā)時間,減低開發(fā)成本。2.安全性。Java提供了許多安全機制,是能用在網(wǎng)路和分布環(huán)境下的程序設(shè)計語言。3.多線程。Java具備內(nèi)建的多線程功能,使各線程并發(fā)、獨立執(zhí)行,提高系統(tǒng)的運行效率。4.平臺獨立。平臺獨立是指程序不受操作平臺限制,可以應(yīng)用于各種平臺。Java源程序經(jīng)過編譯后能夠生成字節(jié)碼文件,字節(jié)碼和具體的計算機無關(guān)。計算機安裝能解釋執(zhí)行字節(jié)碼的JVM,就能執(zhí)行字節(jié)碼文件,實現(xiàn)了Java的平臺獨立性。5.執(zhí)行效率。字節(jié)碼要經(jīng)過JVM解釋成機器碼才能執(zhí)行,所以速度較慢。3TCP協(xié)議是網(wǎng)絡(luò)通信的基石。Java專門提供了Socket的類庫,抽象出TCP協(xié)議通信中的常用方法:①客戶端,首先發(fā)送TCP請求,客戶端是服務(wù)(如數(shù)據(jù)查詢服務(wù))的請求者。②服務(wù)器,接收到客戶端的請求后,服務(wù)器向客戶端提供服務(wù)。服務(wù)器是服務(wù)的執(zhí)行者,返回服務(wù)執(zhí)行的結(jié)果給向客戶端。首先客戶端發(fā)送一個數(shù)據(jù)包SYN。如果服務(wù)器收到SYN,它會發(fā)回一個數(shù)據(jù)包SYN+ACK??蛻舳藶榱吮硎臼盏絊YN+ACK信息,向服務(wù)器發(fā)送一個最終確認信息ACK。SYN,SYN+ACK,ACK步驟被稱為“三次握手”,這樣,連接就建立好了,并將一直保持活動狀態(tài),直到其中一方發(fā)出FIN(結(jié)束)信號或者超時。這種通信模式也被叫做客戶端/服務(wù)器(C/S)模式。第一次握手,主機A向主機A主機B發(fā)送連接請求第三次握手,主機A收到主機B發(fā)送一個確認連接的請求,向主機A回發(fā)一個確認,,同時向主機A發(fā)送一個連接請求主機BSocket通信從概念上理解,Socket是網(wǎng)絡(luò)編程中最常見的客戶/服務(wù)器模式,也是本系統(tǒng)的基礎(chǔ)。以該模式編程時,服務(wù)器端有一個進程或多個進程在指定的端口等待客戶來連接,一旦連接成功,便按設(shè)計的數(shù)據(jù)交換方法和格式進行數(shù)據(jù)傳輸??蛻舳讼蚍?wù)器端提出連接請求,連接之后進行通信。Socket是一種用于表達兩臺機器上都有一個Socket,可以想象一條虛擬的電纜工作在兩臺機器之間,電纜插在兩臺機器的Socket上。簡單的說,一臺計算機上的Socket同另一臺計算機通話創(chuàng)建一個通信信道,我們可以用43系統(tǒng)需求分析3.1項目設(shè)計的需求描述結(jié)束通信重要的業(yè)務(wù),它是使人們能網(wǎng)上識別在線用戶并和他們交換實時消息的技術(shù)。設(shè)計一個基于JAVA的網(wǎng)絡(luò)即時通信系統(tǒng),在通用計算遞和音頻信號的傳輸,實時獲取聯(lián)系人狀態(tài),對常用聯(lián)系人進行管理等。主要考慮以統(tǒng)一建模語言(UML)是可視化建模語言,用于構(gòu)造軟件系統(tǒng)和描述可視化。UML簡單且功能強大,提供了大多數(shù)面向?qū)ο蠛诵母拍?,還提供了擴展方案。UML通過提供九種圖(類圖、對象圖、用例圖、協(xié)作圖、狀態(tài)圖、順序圖、部署圖、組件圖、活動圖)可視化的表達語義。圖Diagram)是模型元素的圖形符號化,由一組元素的圖形表示。UML通過這九種圖可以可視化描述世界上的復(fù)雜事物,有很大的靈活性。RationalRose是基于UML的工具。面向?qū)ο蠹夹g(shù)逐步成熟與軟件工程化思想日益深入,提出基于組件的軟件開發(fā)模式和自動的、科學的技術(shù)和產(chǎn)品,覆蓋了軟件工程各個環(huán)節(jié),如可視化建模、過程自動化、需求管理、軟件質(zhì)量自動保證、軟件配置管理和開發(fā)工具等。不論是系統(tǒng)需求階段,還是在對象的軟件的分析5項目設(shè)計的系統(tǒng)用例圖用戶(user)通過登錄界面與服務(wù)器(Server)進行通信,線好友進行聊天,包括文本消息傳遞和音頻信號傳輸,還能管理自己的好友列表,如刪除好友等。如圖3-錄錄天理登聊管冊友戶注好用<uses>><<uses>>圖3-1系統(tǒng)的總體功能用例圖注冊登錄:用戶可以通過注冊界面填寫必要的信息來是申請到一個賬戶,并可直接跳轉(zhuǎn)到登錄界面,輸好友聊天:用戶可以從在線好友列表中選擇好友進行消息傳遞,也可以跟陌生人進行聊天。用戶管理:用戶可以進行添加好友、刪除好友等操作。語音聊天:用戶可以選擇在線用戶進行語音聊天。本系統(tǒng)主要通過客戶端,服務(wù)器端來體現(xiàn)聊天系統(tǒng)的基本功能。(1)服務(wù)器端:1.處理用戶注冊2.處理用戶登錄3.處理用戶發(fā)送信息4.處理用戶得到信息5.處理用戶退出6.保存服務(wù)器日志7.保存用戶聊天信息(2)客戶端:1.用戶注冊界面及結(jié)果2.用戶登錄界面及結(jié)果3.用戶發(fā)送信息界面及結(jié)果4.用戶得到信息界面及結(jié)果5.用戶退出界面及結(jié)果6user注冊活動圖啟動Server后,Server開啟一個Socket連接的監(jiān)聽線程,用來監(jiān)聽來自網(wǎng)絡(luò)的連接。當User使用Client進行注冊賬號,user要把個人資料填寫完并發(fā)送給Server。Server來驗證user填寫的個人資料是否合法,如果合法,Server將用后臺數(shù)據(jù)庫表ICQ自動序列生成ICQ號返回給user。如果不合法,Server拒絕申請,并將填寫資料錯誤的信息返回給user。如圖3填與注射位息住是展務(wù)都視受服務(wù)注函講求檢查注激位辭界戶酮位查不合法合達合法資科不合法資料違冊語求【批施】注翁請求【成內(nèi)》user登錄活動圖啟動Sever后,Server開啟一個Socket連接的監(jiān)聽線程,用來監(jiān)聽來自網(wǎng)絡(luò)的任何連接。當Clie錄,user使用賬號和密碼進行登錄,Server將user發(fā)過來的user信息和Server后臺數(shù)據(jù)庫里的user信息進行比對。如果user的賬號和密碼與之完全匹配,則user成功登錄,并且Server返回給user登錄賬號的好友列表、好友資料、好友狀態(tài);如果不匹配,Server則告知Client的user登錄失敗。如圖3-3user登錄活動圖:7SERVERSERVER聯(lián)務(wù)器監(jiān)電掛受并校驗登的請承登地請深【類過】基州我的燃些信點與好與替料,并向好與安送我的上理圖3-3user登錄活動圖注冊德錄(成動】CLIENTuser好友添加時序圖userA打開好友添加面板并填寫添加請求。請求先是由userA發(fā)送給Server,再由Server轉(zhuǎn)發(fā)給userB,如果userB接收到請求成功,userB的Client則自動打開一個好友請求界面告訴userB有陌生人添加請求。圍戶A發(fā)送添加請求田產(chǎn)B接受請求回復(fù)請求轉(zhuǎn)發(fā)回復(fù)接收回復(fù)圖3-4user好友添加時序圖user聊天時序圖發(fā)送給Server,然后由Server轉(zhuǎn)發(fā)給userB,如果userB接收消息成功,Server將發(fā)送成功的消息返回給UserA;如果userB接收消息失敗,Server將發(fā)送失敗的消息返回給userA。user聊天時序圖,如圖3-5:#A立致在照大面吸屋務(wù)置數(shù)接揮且打開發(fā)送發(fā)送失數(shù)接救user語畜聊天時序圖userA打開語音聊天界面,選擇好灰userB,向他發(fā)送語音請求。該請求先是由userA發(fā)送給server,然后由server轉(zhuǎn)發(fā)給userB。use將處理請求發(fā)送給Server,再由server根據(jù)userB的處理請求做出相應(yīng)處理。如果userB同意語音請求,則UMLuser語音聊天時序圖,如圖3-6:田戶田戶A填寫請求接受詰求同復(fù)請求轉(zhuǎn)發(fā)可復(fù)8好友怒加界血服務(wù)器user請青聊天時序圖94系統(tǒng)數(shù)據(jù)庫設(shè)計用戶和客戶端的關(guān)系本系統(tǒng)采用SQL2005數(shù)據(jù)庫管理系統(tǒng),用于實現(xiàn)系統(tǒng)信息的管理。根據(jù)系統(tǒng)需求,列出以下數(shù)據(jù)項Client:注冊、登錄、查看資料、離線消息傳遞等。User:昵稱、性別、號碼、年齡、地址、等。消息傳遞消息傳遞號碼登陸客戶機離線查看用戶資料使用性別年齡地址時間用戶昵稱圖4-1系統(tǒng)數(shù)據(jù)庫E-R圖用戶和登錄記錄的關(guān)系記錄:登錄次數(shù)、上線時間、下線時間、登錄的IP。User與登錄記錄之間是通過號碼聯(lián)系。所以,user與登錄記錄的E-R圖如圖4-2所示。上線時間上線時間號碼M登錄次數(shù)地址下線時間性別IP用戶昵稱使用時間圖4-2user與登錄記錄E-R圖用戶和聊天記錄的關(guān)系聊天記錄:接收消息內(nèi)容、發(fā)送消息內(nèi)容、發(fā)送消息時間、接收消息時間。User與聊天記錄之間是通過登錄聯(lián)系,登錄的屬性包括IP、號碼等。所以,user與聊天記錄的E-R圖如圖4-3所示:發(fā)送消息發(fā)送消息號碼接收消息M接收時間地址發(fā)送時間性別IP時間用戶昵稱使用圖4-3user與聊天記錄E-R圖數(shù)據(jù)庫中表格的設(shè)計本系統(tǒng)需要用SQLserver2005實現(xiàn)數(shù)據(jù)表,user個人信息表分別設(shè)id、nickname、age、sex、據(jù)類型。選擇使用設(shè)計器創(chuàng)建表新建數(shù)據(jù)庫,如圖4-4數(shù)據(jù)庫窗口所示:S*南在umsdduh2777*其種勢Mebaon確一車以線如圖4-4數(shù)據(jù)庫窗口因此,對user個人信息表進行創(chuàng)建、保存,user個人信息表如表4-5所示:表4-5user個人信息表列名數(shù)據(jù)類型長度允許空4Nonickname4addresspassword對表3-2定義的字段進行詳細的信息填充,在user登錄成功并獲得user列表后便可通過點擊user資料看到在線user的nickname、age、sex、id、address等詳細的基本信息。段為日期的數(shù)據(jù)類,loginlP字段為文本的數(shù)據(jù)類型,logindegree字段為整數(shù)的數(shù)據(jù)類型。user登錄記錄發(fā)如表4-6所示:列名數(shù)據(jù)類型長度允許空onlinetimedatetime8Yesoutlinetimedatetime8YesTextNo4No聊天記錄表分別設(shè)recvmsg、sendmsg、recvtime、sendtime字段,其中sendtime、recvtime字段為日期型的數(shù)據(jù)類型,sendmsg、recvmsg字段為文本的數(shù)據(jù)類型。user聊天記錄表如表4-7所示:表4-7user聊天記錄表列名數(shù)據(jù)類型長度允許空88注冊user應(yīng)該具有昵稱、Icqno號碼、狀態(tài)、性別、IP、密碼、住址、個人資料、頭像、Email信息,數(shù)據(jù)庫存儲所有Icqnouser的個人信息和好友列表。user通過Client向Server發(fā)出請求來修改個人信息和管理好友列表。5詳細設(shè)計系統(tǒng)總體流程圖開始否判斷啟動信息是啟動客戶端是否注冊用戶否是退出聊天室結(jié)束系統(tǒng)客戶端流程圖開始開始客戶端登錄界面聊天室界面清屏聊天內(nèi)容時鐘保存退出聊天對象業(yè)結(jié)束字體顏色表情圖5-2客戶端流程圖6系統(tǒng)實現(xiàn)編寫服務(wù)器端程序問題陳述1.接受用戶注冊信息并且保存在一個基于文件的對象型數(shù)據(jù)庫。2.能夠允許已注冊的用戶登錄聊天界面并可以進行聊天。3.能夠接受私聊信息并且發(fā)送給指定的用戶。4.服務(wù)器能夠運行在自定義的端口上1001。5.服務(wù)器可以監(jiān)控用戶列表和用戶聊天信息(私聊除外)。6.服務(wù)器踢人,并且發(fā)送通知。7.服務(wù)器能夠保存日志。后臺數(shù)據(jù)庫設(shè)計基于服務(wù)器跨平臺運行的構(gòu)想,服務(wù)器的后臺數(shù)據(jù)庫使用SQLServer2005。列名數(shù)據(jù)類型長度允許空UserNametouxiangSeclectVUserFwd√√V列名數(shù)據(jù)類型長度允許空VUserPwdV此表主要包含了用戶基本帳戶信息。聊天系統(tǒng)采用UserName作為用戶帳號,并給每個用戶自動生成一個唯一ID來做系統(tǒng)內(nèi)部的用戶標用戶注冊首先要啟動服務(wù)器,聊天服務(wù)器的啟動界面如圖6-3:RegisterRegisterCustomerclientMessage=(RegisterCustomer)objprintln("注冊名重圖6-3聊天服務(wù)器的啟動界面1.到數(shù)據(jù)庫讀數(shù)據(jù)首先,創(chuàng)建一個File文件類,載入“user.txt”文本,再用對象輸入流ObjectInputStream把用戶信息導(dǎo)入2.客戶端請求注冊客戶端要通過Register.java請求注冊,并填寫注冊信息,能夠驗證密碼是否符合規(guī)定,能夠判斷是否求注冊部分代碼如下:intflag=0;//是否重名判斷標志___newFile("user.txt");ObjectInputStreamobjInput=newObjectInputStream(newFileInputStream(fList));vList=(Vector)objInput.readObject();//判斷是否有重名for(inti=0;i<vList.size();i++){Register_Customerreg=(Register_Customer)vList.elementAt(i);if(reg.custName.equals(clientMessage.custName)){toClient.FileOutputStream(fList);ObjectOutputS將用戶注冊成功的信息或失敗的信息用打印流包裝FileOutputStream(fList);ObjectOutputS將用戶注冊成功的信息或失敗的信息用打印流包裝Socket之后,將注冊結(jié)果的詳細信息輸出給客戶服務(wù)器端收到注冊請求后會把對象輸入流轉(zhuǎn)化為文件輸出流,并且反饋給客戶端??蛻舳耸盏阶孕砰]對象輸出流和文件輸入流。服務(wù)器響應(yīng)部分代碼如下://將向量中的類寫回文件//將向量中的類寫回文件4.向客戶端返回信息端。向客戶端返回信息部分代碼如下://發(fā)送注冊成功信息toClient.printin(clientMessage.custName+*Datet=當以土的程序都正常運行結(jié)束后,需要關(guān)閉Soeket連接,否則服務(wù)器與客戶端之間的資源將會浪費。關(guān)//關(guān)閉Socket連接部分-用戶登陸-1.到數(shù)據(jù)庫讀用戶數(shù)據(jù)打開用戶數(shù)據(jù)庫文件“User.txt”,把用戶數(shù)據(jù)對象集載入內(nèi)存,供下面的程序使用。到數(shù)據(jù)庫讀用戶數(shù)據(jù)的部分代碼如下:FilelnputStreamfile3=newFileInputStream("user.txt");ObjectInputStreamobjInput1=newObjectInputStream(file3);vList=(Vector)objInput1.readObject();2.驗證用戶名是否存在到對象數(shù)據(jù)庫中查找是否存在和登錄用戶的用戶名相同的記錄,如果有則繼續(xù)驗證,否則退出驗證戶登陸程序模塊部分代碼如下:if(reg.custName.equals(clientMessage2.custNamefind=1;if(!reg.custPassword.equals(clientMessage2.custPassword)){toClient.println("密碼不正確");brea//判斷是否已經(jīng)登錄for(inta=0;a<userOnli_custName=((Customer)userOnline.elementAt(a)).custName;if(clientMessage2.custName.equals(_custName)){login_flag=1;break}if(userOnline.size()>=50){toClient.println("登錄人數(shù)過多,請稍候再試當前塊態(tài)服務(wù)器日志已啟動,用戶郝金登錄成功,登錄時間2012-4-820:47:26當前在線人數(shù)用戶姚遠注冊成功,注冊時間2012-4-820:50;32用戶姚遠登錄成功,登錄時間2012-4-820:51:07用戶周娟注冊成功,注冊時間2012-4-820:54:12用戶周娟登錄成功,登錄時間2012-4-820;54:5150人服務(wù)器名稱訪問協(xié)議搬夯器中服委器瑞口圖6-4聊天服務(wù)器的用戶登錄界面天閉服務(wù)器)保存日志S)用戶退出1.接收退出信息當用戶退出時,客戶端將向服務(wù)器退出對象發(fā)送基于Socket的對象輸出流。2.在線列表中刪除用戶用戶退出后,程序要把用戶從在線列表中刪除,否則用戶退出后用戶卻還在在線列表中,那么該用戶下次將會無法正常登錄。3.更新在線列表用戶退出后,將服務(wù)器端監(jiān)控界面的用戶列表更新。否則用戶數(shù)據(jù)將會不同步。聊天服務(wù)器的用戶退出界面如圖6-5:服務(wù)器管理用戶信息管理[服務(wù)葬日志]已啟動.用戶姚遠注冊成功,注冊時間:2012-4-82數(shù)多在線人數(shù)用戶周娟注冊成功,注冊時間:2012-4-820;54:12間:2012-4-821:04:52服勞器名稱eyd-FC訪間步議HTTP服務(wù)器端口圖6-5用戶退出模塊程序部分代碼如下:關(guān)閉服務(wù)器W保存日志(⑤)if(sFrame.ti.equals(exit.exitname)"""}}接收用戶聊天信息用戶發(fā)送聊天信息時,服務(wù)端便會接收到客戶端用Socket傳送過來的聊天信息對象,并且將其強制轉(zhuǎn)換為Chat對象。2.過濾用戶聊天內(nèi)容的非法信息對聊天信息對象的聊天內(nèi)容進行分析,用語言過濾類過濾掉非法字符。語言過濾的時候?qū)蜷_“badword.txt”文件,不允許出現(xiàn)的關(guān)鍵詞已存儲在文件中,關(guān)鍵字之間用逗號分割。當聊天內(nèi)容中出現(xiàn)要過渡的關(guān)鍵字,而聊天內(nèi)容將會被系統(tǒng)屏蔽。3.接收服務(wù)器端的系統(tǒng)消息當有其他用戶登陸時,系統(tǒng)會把用戶登陸信息在線發(fā)送給所有其他用戶,并且可以通過服務(wù)器給所有用戶發(fā)送系統(tǒng)消息。4.返回給客戶端當以上信息都封裝成功后,打開與客戶端連接的Socket的輸出流,然后再用ObjectOutputStream對象輸出流包裝后輸出給客戶端。聊天服務(wù)器的接收用戶聊天信息界面如圖6-6:聊天服務(wù)器的接收用戶聊天信息界面如圖6-6:HappyChatj聊天服務(wù)器服務(wù)器管理用戶信息管理[期戶省意】[20:58:44]郝金一所育入你好,你是哪里人呀?L20:59.28]郝金-赟[20:59:50]郝金->周娟:妹妹![21:0:49]周娟-郝金:什么事啊?圖6-6聊天服務(wù)器的接收用戶聊天信息界面接收用戶聊天信息部分代碼如下:[在線用戶列表]郝金publicvoidserverChat(){//將接收到的對象值賦給聊天信息的序列化對象ChatcObj=newChat();cObj=(Chat)obj;//chenmincObj.chatMessage=WordFilter.filter(cObj.chatMessage);chatLog(cObj);//將聊天信息的序列化對象填加到保存聊天信息的矢量中ObjectOutputStream(toServer.getOutputStreamObjectOutputStream(toServer.getOutputStream));writeObject((Register_Customer)data);userChat.addElement((Chat)cObj);客戶端程序編寫用戶注冊程序?qū)⑼ㄟ^Register.java用戶注冊界面收集用戶的用戶名、密碼、頭像、性別、年齡、電子郵箱。如圖圖6-7用戶注冊界面客戶端用戶注冊信息模塊程序部分代碼如下:SockettoServer;ObjectOutputStreamstreamToServer=newBufferedReaderfromServer=newBufferedReader(newInputStreamReader(toServer.getInputStream)));Stringstatus=fromServer.readLine();JOptionPaneop=newJOptionPane();op.showMessageDialog(null,status);if(status.equals(data.custName+"注冊成功"))txtUserName.setText("");pwdUserPassword.setText("");pwdConfirmPass.setText("");txtAge.setText("");txtEmail.setText("");}用戶登錄用戶登錄麗務(wù)部四)登錄圖6-8用戶登陸界面圖郝金用戶登錄部分代碼如下://接受客戶的詳細資料//連接到服務(wù)器toServer=newSocket(strServerlp,1001);ObjectOutputStreamstreamToServer=newObjectOutputStream(toServer.getOutputStream());//寫客戶詳細資料到服務(wù)器socketstreamToServerstreamToServer.writeObject((Customer)data);//讀來自服務(wù)器socket的登錄狀態(tài)BufferedReaderfromServer=newBufferedReader(newInputStreamReader(toServer.getlnputStream)));Stringstatus=fromServer.readLine();newChatRoom((String)data.custName,strServerlp);this.dispose();//關(guān)閉流對象streamToServer.close();fromServer.close();toServer.close();JOptionPane.showMessageDialog(null,status);streamToServer.close();fromServer.close();toServer.close();}聊天室實現(xiàn)當用戶登錄成功后,用戶的登錄界面將會隱藏,然后創(chuàng)建用戶聊天室窗口,在界面的標題欄將會顯示當前登錄用戶的用戶名,以防止一個機器上的用戶開多個賬號進入聊天室后分不清哪個窗口是哪個用戶登錄的,界面第一行將顯示當前在線人數(shù)。位于界面正中的兩個控件分別是List和TextBox用來顯示當前服務(wù)器上的在線會員名單列表和公共聊天信息。位于界面下方的就是一些用于聊天的功能控件和聊天內(nèi)容個性化配置控件。包括聊天對象,聊天語氣,聊天內(nèi)容,聊天字體,風格,大小,顏色等。聊天室界面如圖6-9:【在線用戶列表】郝金你對所有人表情聊天內(nèi)容在線人數(shù)1【聊天信息]清屏(C)時鐘(T)發(fā)送N)]私聊宋體用戶發(fā)送信息當用戶需要發(fā)送信息時,需要在聊天內(nèi)容里寫下要發(fā)送的信息,然后點擊發(fā)送按鈕就可以發(fā)送到其他客戶端,也可以選擇私聊、聊天表情,聊天信息將會通過服務(wù)器發(fā)送到其他客戶端。如圖6-10:聊天室[用戶:郝金]聊天室[用戶:郝金]甜笑聊天內(nèi)容圖6-10聊天室界面在線用戶列康姚遠周娟對【然遠】翻笑地說:你還在啊?】…了了來來【【遠娟)】】清屏(c)時鐘心)發(fā)送(N)宋體挑周你你對……用戶發(fā)送信息部分代碼如下:保存聊天記錄保存聊天記錄publicvoidsendMessage(){Chatchatobj=newChat);chatobj.chatUser=strLoginName;chatobj.chatMessage=txtMessage.getText();chatobj.chatToUser=String.valueOf(cmbUser.getSelectedItem());chatobj.whisper=chPrivateChat.isSelected()?true:false;chatobj.emote=emote.getSelectedItem().toString();//向服務(wù)器發(fā)送信息try{SockettoServer=newSocket(strServerlp,1001);ObjectOutputStreamoutObj=newObjectOutputStream(toServer.getOutputStream));outObj.writeObject(chatobj);txtMessage.setText("outObj.close();toServer.close();}catch(Exceptione){}//sendMessage()結(jié)束為文件名,以防多用戶聊天記錄文件出現(xiàn)沖突問題,并將信息保存在當前應(yīng)用程序目錄下。如圖6-11:顯顯(在線用戶列表)在線人數(shù):【癡關(guān)信息]姚送】對上郝金黑嘻嘻地說:在【你】對【郝金】嘿嘿地說:什么事啊?消息X消息確定你對宋體正規(guī)聊天內(nèi)容清屏E)時鐘T)退出(g圖6-11記錄保存圖保持模塊程序部分代碼如下://"保存"按鈕"_message.txt",true);Stringtemp=taUserMessage.getText();//System.out.println(temp);fileoutput.write(temp.getBytes());fileoutput.close();JOptionPane.showMessageDialognull,"聊天記錄保存在"+this.strLoginName+"_message.txt").}catch(Exceptione){System.out.printl}示系統(tǒng)時間間。如圖6-12:圖6-12時鐘界面fpublicvoidpaint(Graphicsg)Insetsinsets=getInsets();intLO=(insets.left)/2,TO=(insets.top)/2;inthh,mm,ss;Stringst;h=getSize().height;Calendarnow=Calendar.getInstance();mm=now.get(Calendar.MINUTE);/分鐘g.setColor(Color.pink);g.fillRect(LO,TO,60,28)g.g.setColor(Color.blue);g.drawString(st,L0,TO+25);sdo=90-ss*6;mdo=90-mm*6;hdo=90-hh*30-mm/2;x=(int)((r-8)*Math.cos(RAD*sdo)+x0);y=(int)((r-8)*Math.sin(RAD*sdo)+y0)-2*T0;g.drawLine(x0,y0,x,(h-y));oldX=x;old_Y=y;}//endpaint屏蔽聊天信息當用戶發(fā)送的信息涉及到敏感詞匯(比如一些不文明的用語)的時侯,程序?qū)延脩舭l(fā)送的信息與badword文件進行比對,如果比對得到敏感詞匯,程序?qū)帘卧撚脩舭l(fā)送的信息,如圖6-13:【在線用戶列裝)來了】郝矣】對【所有人】甜笑地說:你好,你是哪里人呀?黏塞]對上圖后卻型據(jù)你建啊?(你于對工郝金】嘻蹬地說:在!發(fā)送@)保存(S)退出α)清屏心)(聊滅信息】金遠郝姚周郝郝金嘻嘻私聊正規(guī)X圖6-13屏蔽聊天信息publicvoidprocess(){StringbadWord=this.getFile("badword.txt");System.out.println(badWord);StringbadWordList[]=badWord.split(",");for(inti=0;i<badWordList.length;i++){System.out.println(badWordList[i]);System.out.println(badWordList[i]+":"+word.indexOf(badWoif(word.indexOf(badWordList[i])!=-1){word="非}退出聊天系統(tǒng)并且退出客戶端程序。如圖6-14:保存日志西保存日志西服務(wù)器管理用戶信息管理普前狀老050人照參器名稱xP-201110200844防同協(xié)議10圖6-14用戶退出聊天系統(tǒng)Exitexit=newExit();ex//向服務(wù)器發(fā)送信息ObjectOutputStreamoutObj=newObjectOutputStream(toServeroutObj.writeObject(exit);outObj.close();toServer.close();frmChat.dispose();//this.destroy();exit();}出現(xiàn)異常信息在用戶聊天時,當服務(wù)器關(guān)閉或者與服務(wù)器無法連接時,客戶端將會給出“不能連接到服務(wù)器!”的信息。并在用戶查看后退出客戶端。7結(jié)語在這次的畢業(yè)設(shè)計中,我應(yīng)用了JAVA開發(fā)工具在WINDOWS平臺上開發(fā)了一個基于WINDOWS平臺的局域網(wǎng)通信工具,在這一重要的領(lǐng)域進行了相關(guān)的實踐,不管是對我的研究能力,還是實際動手能力,還是資料查閱能力,都起了相當大的益處。所以,我決定認真總結(jié)這次畢業(yè)設(shè)計的經(jīng)驗,以及學習到的知識,來更加的充實自己的頭腦和完善自己的知識結(jié)構(gòu)。本文分別討論了網(wǎng)路即時通訊系統(tǒng)產(chǎn)生的背景、現(xiàn)狀和發(fā)展前景和開發(fā)的意義,對這個軟件有了一定的認識和開發(fā)方向。然后討論了網(wǎng)絡(luò)即時通訊系統(tǒng)需要運用的技術(shù),雖然沒有詳細描述各項技術(shù),但是也比較全面地羅列了需要的技術(shù)及原因。最后從軟件需求這個角度詳細分析了這個軟件的功能,并用了各種用例圖、活動圖、序列圖等來描述系統(tǒng)的功能和實現(xiàn)構(gòu)想,此外,也初步進行了數(shù)據(jù)庫的設(shè)計,并用E-R圖來就解釋說明。在一般情況下,聊天工具由客戶端程序和服務(wù)器程序以及服務(wù)器端的數(shù)據(jù)庫組成。本系統(tǒng)采用客戶機/服務(wù)器體系結(jié)構(gòu)模型,由JavaSocket類提供連接每個客戶端與服務(wù)器通信。另一方面,因為聊天是多點對多點的,Java提供可用于完成多點對多點的多線程聊天。數(shù)據(jù)庫管理系統(tǒng)用SQLServer2005完成并通過JDBC-ODBC橋訪問數(shù)據(jù)庫。系統(tǒng)著重研究并實現(xiàn)了網(wǎng)絡(luò)應(yīng)用的部分。根據(jù)實現(xiàn)的情況看,具有較友好的聊天界面生成效果,以及流暢的網(wǎng)絡(luò)通信效果。生成的聊天室可以達到基本的聊天要求,具有較高的研究價值。有許多考慮不周全的地方,如果沒有導(dǎo)師的督促指導(dǎo),以及一起工作的同學們的支持,想要完成這個設(shè)計通過畢業(yè)設(shè)計,發(fā)現(xiàn)自己在理論研究和實際工作能力等方面都得到了提高,受益匪淺,同時在老師的指導(dǎo)和課題組同學的共同幫助下,及時總結(jié)研究成果,這些無疑會對我今后的工作和學習帶來很大的幫助。進入社會后,我以后會更加努力,是學校給我學習的機會,在以后的生活中繼續(xù)提高自己,為自己創(chuàng)參考文獻[1]吳其慶JAVA編程思想與實踐.北京冶金工業(yè)出版社.2002年8月[2]林智揚.范明翔.深入淺出JAVASWING程序設(shè)計.中國鐵道出版.2005年4月[3]張海藩.軟件工程導(dǎo)論(第四版).清華大學出版社.2003年12月[4](英)JohnCarter,張淮野袁怡等譯.數(shù)據(jù)庫設(shè)計與編程實例詳解.電子工業(yè)出版社.2001年2月[5]Sun.JavaProgrammingLanguageSL-275.2002年5月機械工業(yè)出版社出版.1999年[7]EdwardYourdon&CarlArgila.《casestudiesinOBJECTORIENTEDA出版社出版.1998年SoftwareEngineering.2002,28(12)[9]羅軍舟等.TCP/IP協(xié)議及網(wǎng)絡(luò)編程技術(shù).清華大學出版社.2008(10)[10]孟凡榮.數(shù)據(jù)庫原理與應(yīng)用.中國礦業(yè)大學,2009(8)28-30[11]BruceTate.《BitterJava》.ManningPublications.2002-042001[13]BruceEckel.《ThinkinginJava(3rdEdition)》.PrenticeHallPTR.2002-12-06[14]JoshuaBloch.《EffectiveJava:SecondEdition》.Addison-Wesley.2008-05-28[15]KathySierra/BertBates/SierraKathy/BatesBert.《HeadFirstJava,2ndEdition》.O'ReillyMedia.[16]Pavlou,P.A.ConsumerAcceptanceofElectronicCommerce:IntegratingTrustandRiskwiththeTechnologyAcceptanceModel.InternationalJournalofElectronicCommerce.2003.7(3):101-134致謝本論文是在徐昕老師的精心指導(dǎo)下完成的,導(dǎo)師嚴謹?shù)闹螌W態(tài)度、對事業(yè)的熱忱,對我有很大的幫助,至此論文完成之際,謹向他致以深深地敬意和由衷的感謝!在完成論文的過程中,也得到了許多同學的大力支持,在此一并感謝。感謝南京信息工程大學圖書館提供的相關(guān)資料。designandimplementation,itusesmulti-threadingtechnology,whichcanrunaprograminseveraldiffsimultaneously,performingdifferenttasks,greatlyimprovestheutilizationofserverresources.SQLServer2005databaseonetoonechat,addanddeletefriends,newuserregistration,e-mail,filetransferandvoiceandvideochat.Keyword:network,instantmessaging,C/S,SQL2005IfIfyoudon'thaveitalready,downloadEclipseV3.4(Ganymede).InGanymede,thesocketlisteningconnectorhasbeenaddedtotheRemoteJavaApplicationlaunch-configurationtype.Eclipse'snewsocketlisteningDebugJavaapplicationsremotelywithEclipseUsethepoweroftheEclipseIDEtospreadaroundyourJavaapplicationdebuggingLevel:IntermediateYoudon'tneedtodebugJavaapplicationsonjustyourlocaldesktop.Learnhowtospreadarticleexplainsthefeaturesandexamplesthatshowhowtosetupremoteapplicationdebugging.low-endmachinethatcannothostthedevelopmentplatform,ordebuggingprogramsondedicatedapplicationsrunningwithlimitedmemoryorCPUpower,suchasmobiledevices,ordeveloperswantingtoseparatetheapplicationanddevelopmentenvironments,etc.Alaunchconfiguratkonpsasetofattributesthatcanbeusedtolaunchaprogram.TheuniquetypeofprogramthatcanbelaunchedintheEclipseplatform.release,onlyasocket-attachingconnectorwasprovided,andtheprogrambeingdebuggedhadtohostduetoinsufficientmemoryandCPUpower.Touseremotedebugging,JavaVirtualMachine(JVM)V5.Oorlatermustbeused,suchasIBMBJ9orSunMicrosystems'JavaSEDevelopmentKit(JDK).Inthisarticle,wefocusonremotedebugging,ratherthandetaileachofEclipse'sdebuggingfeatures.SeeResourcesformoreinformationaboutdebuggingwithEclipseandwheretofindtheaforementionedsoftware.SunSunMicrosystems'JavaPlatformDebuggerArchitecturetiethemtogether(back-endandfront-end).It'sdesignedsystems,too.V5,JVMTIreplacedJVMDI,whichwasusedinJavatheformatofdebugginginformationandrequestsdebuggerfrontend,whichimplinterfacetodefinetheinformationandrequestsusedforremotedebugging.Thearchitectureisstructuredasfollows.DevelopmentToolsDebuggerArchitectureMachineInterfaceComponentsDebuggerInterfacesdebuggee----(|--------------|<----JVMTI-JavaVMToolInterface//\Therefore,anythird-partytoolsandVMbasedonJPDAshouldworktogetherwithoutcomplaint.runningtheplatform,orevendebugitfromaremotecomputeronyospecification:connectorandtransport.AconnectorisaJDIabstractionusedtoestablishaaccessandtransmitdatabetweenthefrontendandbackend.Theconnectors"map"totheavailabletransporttypesandthemodesofconnection.InSun'sreferenceimplementationofJPDA,serverandlistensforaconnection.Atsomelatertime,theothersideattachestothelistenerandasaserver.Thecommunicationsamongprocessescanberunningononemachineordifferentmachines.remoteJavabackend.Unfortunately,thereisnotmuchinformationaboEnablesdebuggingfeatures.Windowsplatform,ifavailable.Otherwise,itattachestoadebuggerapplicationatthespecifiedaddress.Ifthevalueisy,thetargetVMwillbesuResources).connectionatport8765.informationaboutEclipseJDTantypesprovidedbyEclipse,youcanaddalaunchconfigurationinRenabledforyourremoteapplication.Ifthatinformationisnotavailable,youwillgetanerrormessage,suchas"Debuginformationisnotavailable"or"Unabletoinstallbreakpointduetomissinglinenumber."YoucanmodifythesettingsfromtheEclipsemenubychangingwhat'sset?Preserveurused(neverread)localvariablesFihlrefiralybtekslargsrdsfmes,butimprovetperformsns)packagepackagecom.ibm.developerWorks.debugtest;publicclasstest{}}JJtestjavaXpackagecom,ibm,developerWorks.debugtest;puhlicclasstest(public()子yBeforedebuggingyourapplication,ensurethatthedebugoptionsdescribedinFigure1continuetousethedebuggingfeatures,suchasdisplayingthedebugstack,variables,orbreakpointmanagement,etc.@氣OpenTypeHierarchyAlt+Shift+W?ecom.ibm.developerWorks.debugteaCopyQualifiedNameAlt+Shift+5*Import,.CloseUnrelatedProjectsAssigrrWorkingSets..DebugConfigurations…PropertiesAk+Enterjavajarjavajartest.jarThefollowingexampleinvokestheJavaapplicationontheremoteside,actsasadebugserver,debuggerconnects.test.jarIPandportfortargetapplication.Toruntheremoteapplicationinthesamemachine,simplyspecifythehostIPasloctypefiltertextEclipseApplicationJavaAppletJJavaApplicationRemoteJavaApplicationAllowterminatianafremoteVMStandard(SocketAttacName:RemoteDebug_CorfigurationConnectionType:學test,main(String[])line:6typefiltertextEclipseApplication JavaApplicationO5GiFrameworkRemoteJavaApplicationRemoteDebug_ConfigurationApplVReversConnectionType-Project;Browse.Source學debuggingfunctions,suchassettingbreEclipsePlatform."Resources.·LearnmoreaboutJavaPlatformDebuggerArchitecturebySunMicrosystems.developmentofanyJavaapplication,includingEclipseplug-ins.resources.checkoutdeveloperWorkspodcasts.·StaycurrentwithdeveloperWorks'no-costdeveloperWorksOndemanddemos.worldthatareofinteresttoIBMopensourcedevelopers.projectupdatestohelpyoudevelopwithopensourcetechnologiesGetproductsandtechnologies·TheJava2StandardEditionV5orgreaterisavailablefromSunMicrosystems.·CheckoutthelatestEclipsetechnologydownloadsatIBMalphaWorks.·DownloadIBMproductevaluationversions,andgetyourhandsonapplicationandWebSphere8.messaging,andvoicetechnology.使用Eclipse遠程調(diào)試Java應(yīng)用程序利用EclipseIDE的強大功能遠程調(diào)試Java應(yīng)用程序級別:中級2009年12月9日用的機器上(比如服務(wù)不能中斷的Web服務(wù)器)調(diào)試程序。其他情況包括:運行在內(nèi)存小或CUP性能低的設(shè)備上的Java應(yīng)用程序(比如移動設(shè)備),或者開發(fā)人員想要將應(yīng)用程序聽連接器被添加到RemoteJavaApplication啟動配置類序的屬性。啟動配置類型是一種調(diào)試器。在Ganymede發(fā)布之前,僅有一個必須是一個與調(diào)試器相連的調(diào)試主機。由于受到內(nèi)存和CPU不足的限制,要想讓移動設(shè)備每個Eclipse調(diào)試特性的細節(jié)。查看參考資料獲得更多關(guān)于使用Eclipse進行調(diào)試的信息,常用縮寫詞Architecture(JPDA)技術(shù)是一個多層架構(gòu),使您能夠在各種環(huán)境中輕松調(diào)試Java應(yīng)用程序。JPDA由兩個接口(分別是JVMToolInterface和JDI)、一個協(xié)議件組件(后端和前端)組成。它的設(shè)計目的是讓調(diào)試人員在任何環(huán)境中都可以進行調(diào)試。JPDA不僅能夠用于桌面系統(tǒng),而且能夠在嵌入式系統(tǒng)上很好地工作。JVMToolInterface(JVMTI)規(guī)定必須為調(diào)試提供VM(編輯注:從JavaV5開始,將用JVMTI代替JavaV1.4中的JVMDI)。JavaDebugWireProtocol(JDWP)描述調(diào)試信息的格式,以及在被調(diào)試的進程和調(diào)試器前BorlandJBuilder等。根據(jù)Sun的JPDA規(guī)范,被調(diào)試的程序常常稱為debuggee。JDI是一個高級的接口,它定義用于遠程調(diào)試的信息和請求。下面給出了調(diào)試器的DebugInterface)(JavaDebugWireProtocol)●JPDA—Java平臺調(diào)試器架構(gòu)(JavaPlatformDebuggerArchitecture)(JVMDebugInterface)ComponentsDebuggedebuggee-----(|--------------I<----JVMTI-JavaVMToolInterfaceback-end\--------------I/commchannel--(JDWP-JavaDebugWireProtocol\front-end因此,任何第三方工具和基于JPDA的VM應(yīng)該都能協(xié)調(diào)工作。通過這個客戶機-服務(wù)器架構(gòu),您可以從運行該平臺的本地工作站調(diào)試Java程序,甚至還可以通過網(wǎng)絡(luò)進行遠程調(diào)在討論調(diào)試場景之前,我們先了解JPDA規(guī)范中的兩個術(shù)語:連接器和傳輸。連接器是一個JDI抽象,用來在調(diào)試器應(yīng)用程序和目標VM之間建立連接。傳輸定義應(yīng)用程序如何進行訪問,以及數(shù)據(jù)如何在前端和后端之間傳輸。連接器“映射”到可用的傳輸類型和連接模式。在Sun的JPDA參考實現(xiàn)中,為MicrosoftRWindows⑧提供了兩個傳輸機制:套接字傳輸和共享內(nèi)存?zhèn)鬏?。可用的連接器●監(jiān)聽套接字連接器另一端將連接到監(jiān)聽器并建立一個連接。通過連接,調(diào)試器應(yīng)用程序或目標VM都可以充當服務(wù)器。進程之間的通信可以在同一個機器或不同的機器上運行。要遠程調(diào)試Java程序,難點不是在調(diào)試器的前端,而是遠程Java后端。不幸的是,Java運行時環(huán)境實現(xiàn)的。我們僅需要考慮JDMP,因為它包含與JVMTI和JDI進行通信所需的信息。JDWP包含許多參數(shù),用于為遠程Java應(yīng)用程序調(diào)用所需的程序。以下是本文用到在目標VM中加載JDWP實現(xiàn)。它通過傳輸和JDWP協(xié)議與獨立的調(diào)試器應(yīng)用程序通信。下面介紹一些特定的子選項。從JavaV5開始,您可以使用-agentlib:但如果連接到V5以前的VM,只能選擇-Xdebug和-Xrunjdwp。下面簡單描述-Xrunjdwp這里通常使用套接字傳輸。但是在Windows平臺上也可以使用共享內(nèi)存?zhèn)鬏?。如果值為y,目標應(yīng)用程序監(jiān)聽將要連接的調(diào)試器應(yīng)用程序。否則,它將連接到特定地址這是連接的傳輸?shù)刂?。如果服?wù)器為n,將嘗試連接到該地址上的調(diào)試器應(yīng)用程序。否則,將在這個端口監(jiān)聽連接。如果值為y,目標VM將暫停,直到調(diào)試器應(yīng)用程序進行連接。要獲得每個調(diào)試設(shè)置的詳細解釋,請參考JPDA文檔(參見參考資料)。清單2是一個示例,顯示如何在調(diào)試模式下啟動VM并監(jiān)聽端口8765的套接字連接。清單2.作為調(diào)試服務(wù)器的目標VM清單3顯示如何使用位于8000端口的主機上的套接字連接運行中的調(diào)試器應(yīng)用程序。清單3.作為調(diào)試客戶機的目標VM--Xdebug-Xrunjdwp:transport=dt_socket,address=:8000Eclipse中的遠程調(diào)試特性Eclipse是一個圖形化Java調(diào)試器前端。JDI在org.eclipse.jdt.debug包中實現(xiàn)。本文不詳細討論JDI實現(xiàn)。參見參考資料獲得關(guān)于EclipseJDT和JavaJDI技術(shù)的信息。我們首先應(yīng)該知道要使用哪個Eclipse連接器。要了解Eclipse提供的遠程連接類型,您可以轉(zhuǎn)到Eclipse菜單并選擇Run>DebugConfigurations…,在RemoteJavaApplication中添加一個啟動配置,然后從下拉列表中選擇連接器。在Ganymede中共有兩個連接器:以任意選擇。但根據(jù)經(jīng)驗,需要使用速度更快、更強大的計算機作為VM調(diào)試主機,因為需installbreakpointduetomissinglinenumber”。您可以通過更改Eclipse菜單上的Window>--ClassfileGeneration遠程調(diào)試應(yīng)用程序我們?yōu)檎{(diào)試創(chuàng)建一個簡單類。清單4給出了示例代碼。清單4.調(diào)試示例代碼packagecom.ibm.developerWorks.debugtest:publicstaticvoidmain(String[]args){System.out.println("Thisisa2.設(shè)置一個斷點在代碼中設(shè)置一個斷點。在這個例子中,我們在System.out.println("Thisisatest.");JJtestjavacom.ibm,developerWorks.publicclasstest(publicstaticvoidmain(String[]args)(3}3.從本地調(diào)試應(yīng)用程序在調(diào)試應(yīng)用程序之前,確保已經(jīng)為項目啟用圖1中描述的調(diào)試選項。從本地調(diào)試應(yīng)用程g序是沒有必要的,但是這可以確保是否所有調(diào)試信息都可用。右鍵單擊Java項目,并選擇DebugAs,然后選擇JavaApplication(參見圖3)。如果應(yīng)用程序在斷點處停止執(zhí)行,則表明調(diào)試信息正確顯示。這時,可以繼續(xù)使用這些調(diào)試特性,比如顯示調(diào)試堆棧、變量或斷點+Newlicstaticvoidmain(String[]ar用程序OpeninNewWindowOpenTypeHierarchyCopyCopyQuaifiedNamePasteDeleteCtr+CCtrl+VDeleteBuiidPathSourceRefactor?Import.Export…圖3.從本地調(diào)試應(yīng)Refresh
溫馨提示
- 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)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 養(yǎng)老院員工培訓及考核制度
- 企業(yè)員工培訓與技能發(fā)展計劃制度
- 交通標志標線設(shè)置標準制度
- 2026年自然科學基礎(chǔ)知識與綜合測試題集
- 2026年數(shù)學高級教師資格證面試模擬題
- 2026年法律實務(wù)考試練習題及答案公布
- 2026年從容應(yīng)對突發(fā)事件全面了解職業(yè)暴露題庫
- 2026年專利技術(shù)咨詢協(xié)議(專業(yè)·指導(dǎo)版)
- 2026年新版胃造口合同
- 檢驗科檢驗數(shù)據(jù)篡改的識別及追責處理制度
- 樹脂類倉庫管理辦法
- 肥胖健康管理科普
- 產(chǎn)權(quán)無償劃轉(zhuǎn)管理辦法
- 科級后備人員管理辦法
- 2025六下語文部編版學情調(diào)研與教學調(diào)整計劃
- 2025年《物聯(lián)網(wǎng)工程設(shè)計與管理》課程標準
- T-CSTM 00394-2022 船用耐火型氣凝膠復(fù)合絕熱制品
- 滬教版6年級上冊數(shù)學提高必刷題(有難度) (解析)
- DBJ50-T-086-2016重慶市城市橋梁工程施工質(zhì)量驗收規(guī)范
- UL1012標準中文版-2018非二類變壓器UL中文版標準
- 出納常用表格大全
評論
0/150
提交評論