畢業(yè)論文基于J2ME的聊天室加密系統(tǒng)方案_第1頁(yè)
畢業(yè)論文基于J2ME的聊天室加密系統(tǒng)方案_第2頁(yè)
畢業(yè)論文基于J2ME的聊天室加密系統(tǒng)方案_第3頁(yè)
畢業(yè)論文基于J2ME的聊天室加密系統(tǒng)方案_第4頁(yè)
畢業(yè)論文基于J2ME的聊天室加密系統(tǒng)方案_第5頁(yè)
已閱讀5頁(yè),還剩19頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、北 京 工 業(yè) 大 學(xué)畢業(yè)論文 題 目 基于J2ME的聊天室加密系統(tǒng)20 / 24摘 要 本文闡述了如何使用J2ME的Socket編程技術(shù)編寫(xiě)一個(gè)手機(jī)的通信類聊天軟件并集成DES加密程序進(jìn)行時(shí)時(shí)加密,著重討論了從設(shè)計(jì)到實(shí)現(xiàn)軟件的具體過(guò)程與如何利用J2ME,socket,DES等技術(shù)實(shí)現(xiàn)程序代碼。 聊天室系統(tǒng)具有安全與流暢的網(wǎng)絡(luò)通信效果。軟件運(yùn)行速度快、安全性好,也很穩(wěn)定。關(guān)鍵詞:聊天室 J2ME SocketDES目 錄1 前言11.1 課題來(lái)源11.1.1 課題背景11.1.2 課題選擇11.2 課題技術(shù)簡(jiǎn)介21.2.1 J2me簡(jiǎn)介21.2.2 JVM(虛擬機(jī))31.2.3 MIDP(移動(dòng)

2、信息設(shè)備簡(jiǎn)表)41.2.4 Socket41.2.5 Swing51.2.6 MySQL51.2.7 JDBC61.2.8 B/S結(jié)構(gòu)71.2.9 JSP72 軟件需求分析、模塊設(shè)計(jì)和實(shí)現(xiàn)原理82.1 魚(yú)魚(yú)聊天室軟件需求分析82.2 魚(yú)魚(yú)聊天室軟件功能模塊設(shè)計(jì)82.2.1 Web服務(wù)器程序(B/S)82.2.2 桌面程序服務(wù)器端(C/S的Server服務(wù)器端)92.2.3 桌面程序客戶端(C/S的Client客戶端)92.3 魚(yú)魚(yú)聊天室軟件用例圖92.4 軟件實(shí)現(xiàn)原理與具體流程103 魚(yú)魚(yú)聊天室軟件實(shí)現(xiàn)過(guò)程143.1 開(kāi)發(fā)環(huán)境與開(kāi)發(fā)工具的選擇143.1.1 開(kāi)發(fā)環(huán)境143.1.2 MyEcli

3、pse集成開(kāi)發(fā)工具143.1.3 Dreamweaver8網(wǎng)頁(yè)界面開(kāi)發(fā)工具143.2 魚(yú)魚(yú)聊天室軟件實(shí)現(xiàn)過(guò)程說(shuō)明143.3 軟件開(kāi)發(fā)進(jìn)度實(shí)錄153.4 魚(yú)魚(yú)聊天室V2.6.1文件結(jié)構(gòu)203.4.1 客戶端程序結(jié)構(gòu)(Joyu Client)203.4.2 服務(wù)器端程序結(jié)構(gòu)(Sayu Server)223.4.3 Web服務(wù)器端程序結(jié)構(gòu)(Joyu WebService)233.4.4 服務(wù)器端(Joyu WebService和Sayu Server)用到的數(shù)據(jù)庫(kù)結(jié)構(gòu)2335 Socket技術(shù)的代碼實(shí)現(xiàn)魚(yú)魚(yú)聊天室V1.0243.5.1 魚(yú)魚(yú)聊天室V1.0中的客戶端代碼243.5.2 魚(yú)魚(yú)聊天室V1.

4、0中的服務(wù)器端代碼283.5.3 小結(jié)334 魚(yú)魚(yú)聊天室的部署與運(yùn)行334.1 部署334.1.1 本地部署334.1.2 一般部署344.2 運(yùn)行365 結(jié)語(yǔ)36參考文獻(xiàn)37The Implementation and Development of Joyu 38附錄A:附帶光盤(pán)容39附錄B:魚(yú)魚(yú)聊天室運(yùn)行效果部分貼圖42致51仲愷農(nóng)業(yè)工程學(xué)院畢業(yè)論文(設(shè)計(jì))成績(jī)?cè)u(píng)定表521 前言1.1 課題來(lái)源1.1.1 課題背景手機(jī)網(wǎng)絡(luò)技術(shù)眾所周知手機(jī)無(wú)線網(wǎng)絡(luò)技術(shù)是手機(jī)領(lǐng)域中發(fā)展最為迅速的技術(shù)之一,它在政治、經(jīng)濟(jì)、生活等各個(gè)方面發(fā)揮著十分重要的作用。隨著手機(jī)無(wú)線網(wǎng)絡(luò)的普與和推廣,將會(huì)有越來(lái)越多的人利用手

5、機(jī)網(wǎng)上資源,享受不斷發(fā)展和完善的手機(jī)網(wǎng)絡(luò)服務(wù),以此來(lái)提高工作效率和水平。隨著我國(guó)經(jīng)濟(jì)發(fā)展和手機(jī)無(wú)線網(wǎng)絡(luò)的普與,手機(jī)網(wǎng)絡(luò)技術(shù)已成為人們生活不可或缺的一部分聊天室隨著手機(jī)的日益普與,短信業(yè)務(wù)的一些缺點(diǎn)也日益顯現(xiàn):(1)不能實(shí)現(xiàn)一天短信發(fā)送到多個(gè)不同的手機(jī)號(hào)(部分手機(jī)群發(fā)功能只是將短信反復(fù)發(fā)送,實(shí)際需反復(fù)收費(fèi))。(2)短信長(zhǎng)度受到限制。針對(duì)短信業(yè)務(wù)的不足,利用手機(jī)能夠方便的接入無(wú)線網(wǎng)絡(luò)的優(yōu)勢(shì),手機(jī)聊天室應(yīng)運(yùn)而生。他實(shí)現(xiàn)了多人之間較為便捷的交流。手機(jī)病毒 隨著智能手機(jī)的不斷普與,手機(jī)病毒成為了病毒發(fā)展的下一個(gè)目標(biāo)。手機(jī)病毒是一種破壞性程序,和計(jì)算機(jī)病毒(程序)一樣具有傳染性、破壞性。手機(jī)病毒可利用發(fā)送

6、短信、彩信,電子,瀏覽,下載鈴聲,藍(lán)牙等方式進(jìn)行傳播。手機(jī)病毒可能會(huì)導(dǎo)致用戶手機(jī)死機(jī)、關(guān)機(jī)、資料被刪、向外發(fā)送垃圾、撥打等,甚至還會(huì)損毀 SIM卡、芯片等硬件。如今手機(jī)病毒,受到PC病毒的啟發(fā)與影響,也有所謂混合式攻擊的手法出現(xiàn)。網(wǎng)絡(luò)加密技術(shù)在常規(guī)密碼中,收信方和發(fā)信方使用一樣的密鑰,即加密密鑰和解密密鑰是一樣或等價(jià)的。比較著名的常規(guī)密碼算法有:美國(guó)的DES與其各種變形,比如Triple DES、GDES、New DES和DES的前身Lucifer;歐洲的IDEA;日本的FEAL?N、LOKI?91、Skipjack、RC4、RC5以與以代換密碼和轉(zhuǎn)輪密碼為代表的古典密碼等。在眾多的常規(guī)密碼中

7、影響最大的是DES密碼。 常規(guī)密碼的優(yōu)點(diǎn)是有很強(qiáng)的強(qiáng)度,且經(jīng)受住時(shí)間的檢驗(yàn)和攻擊,但其密鑰必須通過(guò)安全的途徑傳送。因此,其密鑰管理成為系統(tǒng)安全的重要因素。 在公鑰密碼中,收信方和發(fā)信方使用的密鑰互不一樣,而且?guī)缀醪豢赡軓募用苊荑€推導(dǎo)解密密鑰。比較著名的公鑰密碼算法有:RSA、背包密碼、McEliece密碼、Diffe?Hellman、Rabin、Ong?Fiat?Shamir、零知識(shí)證明的算法、橢圓曲線、EIGamal算法等等。最有影響的公鑰密碼算法是RSA,它能抵抗到目前為止已知的所有密碼攻擊。 公鑰密碼的優(yōu)點(diǎn)是可以適應(yīng)網(wǎng)絡(luò)的開(kāi)放性要求,且密鑰管理問(wèn)題也較為簡(jiǎn)單,尤其可方便的實(shí)現(xiàn)數(shù)字簽名和驗(yàn)

8、證。但其算法復(fù)雜,加密數(shù)據(jù)的速率較低。盡管如此,隨著現(xiàn)代電子技術(shù)和密碼技術(shù)的發(fā)展,公鑰密碼算法將是一種很有前途的網(wǎng)絡(luò)安全加密體制。 當(dāng)然在實(shí)際應(yīng)用中人們通常將常規(guī)密碼和公鑰密碼結(jié)合在一起使用,比如:利用DES或者IDEA來(lái)加密信息,而采用RSA來(lái)傳遞會(huì)話密鑰。如果按照每次加密所處理的比特來(lái)分類,可以將加密算法分為序列密碼和分組密碼。前者每次只加密一個(gè)比特而后者則先將信息序列分組,每次處理一個(gè)組。 密碼技術(shù)是網(wǎng)絡(luò)安全最有效的技術(shù)之一。一個(gè)加密網(wǎng)絡(luò),不但可以防止非授權(quán)用戶的搭線竊聽(tīng)和入網(wǎng),而且也是對(duì)付惡意軟件的有效方法之一。 J2MEJava ME 以往稱作J2ME(Java Platform,M

9、icro Edition),是為機(jī)頂盒、移動(dòng)和PDA之類嵌入式消費(fèi)電子設(shè)備提供的Java語(yǔ)言平臺(tái),包括虛擬機(jī)和一系列標(biāo)準(zhǔn)化的Java API。它和Java SE、Java EE一起構(gòu)成Java技術(shù)的三大版本,并且同樣是通過(guò)JCP(Java Community Process)制訂的。 根據(jù)Sun的定義:Java ME是一種高度優(yōu)化的Java運(yùn)行環(huán)境,主要針對(duì)消費(fèi)類電子設(shè)備的,例如蜂窩和可視、數(shù)字機(jī)頂盒、汽車導(dǎo)航系統(tǒng)等等。JAVA ME技術(shù)在1999年的JavaOne Developer Conference大會(huì)上正式推出,它將Java語(yǔ)言的與平臺(tái)無(wú)關(guān)的特性移植到小型電子設(shè)備上,允許移動(dòng)無(wú)線設(shè)備

10、之間共享應(yīng)用程序。1.1.2 課題選擇出于上述各種背景考慮,我決定開(kāi)發(fā)一個(gè)基于j2me技術(shù)的手機(jī)加密聊天室軟件。此聊天室雖然其功能簡(jiǎn)單,但是在其設(shè)計(jì)與開(kāi)發(fā)過(guò)程中,能夠充分學(xué)習(xí)和使用J2me以與DES加密算法技術(shù);實(shí)現(xiàn)群聊功能用到基于Cliet/Server的面向連接的 Socket編程技術(shù),并在程序中加入DES加密;1.2 課題技術(shù)簡(jiǎn)介1.2.1 J2me簡(jiǎn)介J2ME的全稱是Java2 Micro Edition (J2ME)Java2技術(shù)微型版,與J2SE、J2EE一樣都是有美國(guó)SUN微系統(tǒng)公司提出的JAVA技術(shù)規(guī)。 J2ME是為了能夠開(kāi)發(fā)運(yùn)行在小型設(shè)備、獨(dú)立設(shè)備、互聯(lián)移動(dòng)設(shè)備、嵌入式設(shè)備上

11、的JAVA應(yīng)用程序而被提出的。J2ME是建立在一個(gè)由概要描述、配置、JAVA虛擬機(jī)和操作系統(tǒng)等部分組成的標(biāo)準(zhǔn)架構(gòu)之上的,這些容共同組成了完整的J2ME實(shí)時(shí)運(yùn)行環(huán)境。它的技術(shù)核心是由一個(gè)JAVA虛擬機(jī)( JVM )與一套適合運(yùn)行在上述設(shè)備環(huán)境上的API接口構(gòu)成。J2ME在1999年的JavaOne開(kāi)發(fā)人員大會(huì)上初次亮相,它的目標(biāo)是面向智能無(wú)線設(shè)備和小型計(jì)算設(shè)備的開(kāi)發(fā)人員,這些開(kāi)發(fā)人員需要在他們的產(chǎn)品中整合跨平臺(tái)的能力。無(wú)線設(shè)備和小型計(jì)算設(shè)備的消費(fèi)者期望這些設(shè)備能夠有較高的性能。他們希望小型計(jì)算設(shè)備有快速的響應(yīng)時(shí)間,與同種設(shè)備相兼容,擁有功能完備的應(yīng)用程序。消費(fèi)者希望桌面計(jì)算機(jī)和筆記本電腦上的軟件

12、和功能同樣能夠運(yùn)行在移動(dòng)和個(gè)人數(shù)字助理上。為了滿足他們的需求,開(kāi)發(fā)人員必須重新考慮他們?cè)O(shè)計(jì)計(jì)算機(jī)系統(tǒng)的方式。開(kāi)發(fā)人員需要利用商業(yè)計(jì)算機(jī)上現(xiàn)有的前端和后端軟件的計(jì)算能力,并將這些能力傳遞到微型、移動(dòng)和無(wú)線的計(jì)算設(shè)備上。J2ME能夠以最小的修改來(lái)實(shí)現(xiàn)這種傳遞,如果應(yīng)用程序的設(shè)計(jì)是可伸縮的,應(yīng)用程序就可以適應(yīng)小型計(jì)算設(shè)備上有限的資源。J2ME為在小型電子設(shè)備上創(chuàng)建性能卓越的網(wǎng)絡(luò)應(yīng)用提供了一套完整的解決方案,能很好的解決軟件跨平臺(tái)的兼容性和安全性的問(wèn)題。52.2.1 J2ME架構(gòu)J2ME架構(gòu)的模塊化設(shè)計(jì)使應(yīng)用程序可以靈活適應(yīng)小型計(jì)算設(shè)備的限制。J2ME架構(gòu)沒(méi)有替代小型計(jì)算設(shè)備的操作系統(tǒng)。相反,J2ME

13、架構(gòu)由位于原生操作系統(tǒng)之上的多層軟件組成,這些軟件共同稱為“連接有限設(shè)備配置”(Connected Limited Device Configuration, CLDC)。安裝在操作系統(tǒng)之上的CLDC形成了小型計(jì)算設(shè)備的運(yùn)行時(shí)環(huán)境。J2ME架構(gòu)由3個(gè)軟件層組成:第一層是包括在的配置層,這個(gè)層次直接與原生操作系統(tǒng)進(jìn)行交互。配置層還處理profile和JVM之間的交互。第二層是profile層,由小型計(jì)算設(shè)備的應(yīng)用程序編程接口(API)的最小集合組成。第三層是Mobile Information Device Profile( MIDP )層。MIDP層由用戶網(wǎng)絡(luò)連接、永久存儲(chǔ)和用戶界面的java

14、 API組成。它還能夠訪問(wèn)CLDC庫(kù)和MIDP庫(kù)。2.2.2 JVM ( 虛擬機(jī) )JVM是專門為微型電子設(shè)備與資源受限設(shè)備如:手機(jī)、尋呼機(jī)、移動(dòng)互聯(lián)網(wǎng)設(shè)備、家用微電子設(shè)備等設(shè)計(jì)的一種輕便、緊湊的JAVA虛擬機(jī)。JVM可以為微型電子設(shè)備提供一個(gè)完整的JAVA運(yùn)行環(huán)境,除了一些微型設(shè)備所必需的適當(dāng)?shù)墓δ苡兴煌?,它是由JAVA虛擬機(jī)規(guī)定義的真實(shí)的JAVA虛擬機(jī)。它是專門為那些受資源限制,只有幾百K字節(jié)存的微型設(shè)備設(shè)計(jì)的。JVM起初是由SUN微系統(tǒng)實(shí)驗(yàn)室為一個(gè)名叫“Spotless”的項(xiàng)目創(chuàng)建的。它的目標(biāo)是為資源受限制的Palm(是目前較為流行的掌上電腦操作系統(tǒng))可連接的電子設(shè)備,實(shí)現(xiàn)一個(gè)jav

15、a虛擬機(jī)?;谏鲜鲈?,JVM具有以下幾個(gè)特點(diǎn):(1)小,僅具有40KB至80KB的靜態(tài)存。(2)輕便、精巧。(3)模塊化并可定制。(4)盡可能完全緊湊的完成設(shè)計(jì)目的。2.2.3 MIDP( 移動(dòng)信息設(shè)備簡(jiǎn)表 )MIDP是專門為互聯(lián)受限設(shè)備配置設(shè)計(jì)的,它為移動(dòng)設(shè)備提供了一套API集合,MIDP包含用戶界面類、持久存儲(chǔ)功能與網(wǎng)絡(luò)功能。它同時(shí)也包括一個(gè)供用戶下載新應(yīng)用到終端設(shè)備的標(biāo)準(zhǔn)運(yùn)行環(huán)境。運(yùn)行在MIDP下的小應(yīng)用程序叫做MIDlet移動(dòng)設(shè)備小應(yīng)用程序,它與Applet類似。MIDP要求平臺(tái)設(shè)備提供一個(gè)機(jī)制用來(lái)存儲(chǔ)簡(jiǎn)單的數(shù)據(jù)記錄,通過(guò)正常的平臺(tái)事件,比如重新啟動(dòng)和電池更新維護(hù)系統(tǒng)的完整性。MID

16、P是以SUN、Motorola、Nokia為中心的MIDPEG組織(Mobile Information Profile Expert Group)所制訂出來(lái)使用在CLDC上的Profile,是以能使用在移動(dòng)、雙向?qū)χv機(jī)、可無(wú)線通信的PDA(個(gè)人數(shù)字助理)上面為前提設(shè)計(jì)出來(lái)的。另外,像日本國(guó)的NTT DoCoMo、J-PHONE、KDDI等電信商與移動(dòng)制造商也都曾參與了MIDPEG。MIDP是在CLDC的功能上附加提供適合目標(biāo)設(shè)備用的GUI與事件處理功能。這樣一來(lái),就可以當(dāng)成MIDP應(yīng)用程序(MIDlet)來(lái)運(yùn)行了。MIDP由于是由多個(gè)企業(yè)所共同策劃出來(lái)的開(kāi)放標(biāo)準(zhǔn),因此主要的移動(dòng)制造商也會(huì)制造

17、出大量的對(duì)應(yīng)機(jī)種。也就是說(shuō),以MIDP為基準(zhǔn)所制作出來(lái)的應(yīng)用程序,也將可以在流通于市面上的移動(dòng)上執(zhí)行。另外,MIDP不僅限于移動(dòng),也已經(jīng)被移植到PDA Palm OS上,而以MIDP for Palm OS的名字來(lái)稱呼(與KJava是不同的)。在不使用各電信商的擴(kuò)展API的時(shí)候,制作給移動(dòng)用的MIDlet也將可以使用在Palm OS上面。由于未來(lái)MIDP也將會(huì)搭載到不同設(shè)備之上,也由于其兼容性高,只要寫(xiě)過(guò)一次程序,就可以在其他移動(dòng)或是移動(dòng)以外的設(shè)備上執(zhí)行;而這也就是它最大的好處。2 軟件需求分析、模塊設(shè)計(jì)和實(shí)現(xiàn)原理1.5 DES加密算法 1DES算法原理DES算法是一種分組加密算法,他以64位

18、的分組數(shù)據(jù)進(jìn)行加解密,數(shù)據(jù)加密和解密使用一樣的算法結(jié)構(gòu),只是密鑰的使用順序不同。蜜鑰通常為64位,但每個(gè)第8位都用作奇偶校驗(yàn),實(shí)際密鑰長(zhǎng)度為56位。DES算法的性取決于密鑰,但只有極少數(shù)的密鑰被認(rèn)為是弱密鑰,所以在實(shí)際的應(yīng)用中可以很容易避免。圖1為DES算法的流程圖。DES算法的基本流程如下:首先,輸入明文通過(guò)初始置換,將其分成左、右各為32位的兩個(gè)部分,然后進(jìn)行16輪完全一樣的運(yùn)算。經(jīng)過(guò)16輪運(yùn)算后,左、右半部分合并在一起經(jīng)過(guò)一個(gè)末置換(初始置換的逆置換),于是整個(gè)算法結(jié)束。在每一輪運(yùn)算中,密鑰位移位,然后再?gòu)拿荑€的56位中選取48位。通過(guò)一個(gè)擴(kuò)展置換,將數(shù)據(jù)的右半部分?jǐn)U展為48位,并通過(guò)一

19、個(gè)異或操作與一個(gè)48位密鑰結(jié)合,通過(guò)8個(gè)S盒將這48位替代成新的32位數(shù)據(jù),再通過(guò)一級(jí)置換操作。這四步操作即為圖1中的函數(shù)f。圖2給出了函數(shù)f的計(jì)算流程圖。假設(shè)Bi是第i次迭代的結(jié)果,Li和Ri為Bi的左半部分和右半部分,Ki是第i輪的48位密鑰,那么每一輪就是: 2具體硬件實(shí)現(xiàn)DES算法的硬件實(shí)現(xiàn)以圖1為基礎(chǔ),其中的初始置換和末置換的實(shí)現(xiàn)比較簡(jiǎn)單,具體可參考文獻(xiàn)1。硬件實(shí)現(xiàn)的關(guān)鍵在于如何實(shí)現(xiàn)函數(shù)f和每一輪迭代中密鑰。本文重點(diǎn)研究了DES算法中函數(shù)f的實(shí)現(xiàn)方法,并給出了 實(shí)際代碼。函數(shù)f的實(shí)現(xiàn)參照?qǐng)D2,首先將數(shù)據(jù)的右半部分?jǐn)U展為48位數(shù)據(jù),該操作的目的是產(chǎn)生與密鑰同長(zhǎng)度的數(shù)據(jù)以進(jìn)行異或操作。異

20、或操作的結(jié)果(48位)進(jìn)行S盒替代,將數(shù)據(jù)壓縮為32位。每個(gè)S盒都有6位的輸入,4位的輸出,48位的輸入被分為8個(gè)6位的分組,每一個(gè)分組對(duì)應(yīng)一個(gè)S盒替代操作。每個(gè)S盒是一個(gè)4行、16列的表,輸入位以一種特殊的方式確定S盒中的項(xiàng)。假定將S盒的6位輸入標(biāo)記為x0,x1,x2,x3,x4,x5。則x0和x5組合成2位的數(shù),從03,對(duì)應(yīng)表中的一行,x2x5構(gòu)成一個(gè)4位的數(shù),從015,對(duì)應(yīng)表中的一列。限于篇幅,本文僅給出S1盒的置換,具體如表1所示。1.2.4 SocketSocket通常也稱作"套接字",用于描述IP地址和端口,是一個(gè)通信鏈的句柄。應(yīng)用程序通常通過(guò)"套接字

21、"向網(wǎng)絡(luò)發(fā)出請(qǐng)求或者應(yīng)答網(wǎng)絡(luò)請(qǐng)求。Socket接口是TCP/IP網(wǎng)絡(luò)的API,Socket接口定義了許多函數(shù)或例程,程序員可以用它們來(lái)開(kāi)發(fā)TCP/IP網(wǎng)絡(luò)上的應(yīng)用程序。要學(xué)Internet上的TCP/IP網(wǎng)絡(luò)編程,必須理解Socket接口。 Socket接口設(shè)計(jì)者最先是將接口放在Unix操作系統(tǒng)里面的。如果了解Unix系統(tǒng)的輸入和輸出的話,就很容易了解Socket了。網(wǎng)絡(luò)的Socket數(shù)據(jù)傳輸是一種特殊的I/O,Socket也是一種文件描述符。Socket也具有一個(gè)類似于打開(kāi)文件的函數(shù)調(diào)用Socket(),該函數(shù)返回一個(gè)整型的Socket描述符,隨后的連接建立、數(shù)據(jù)傳輸?shù)炔僮鞫际峭ㄟ^(guò)

22、該Socket實(shí)現(xiàn)的。下面是一個(gè)經(jīng)典的基于TCP/IP面向連接的Socket網(wǎng)絡(luò)編程流程圖:圖1 面向?qū)ο蟮腟ocket編程聊天室就是采用上述面向連接的Socket編程技術(shù)實(shí)現(xiàn)的,從JoyuChat1.0版本就可以清晰地看出圖1所示的流程,所有后續(xù)版本都只是增加一些實(shí)用的功能,而這所有功能的實(shí)現(xiàn)都是基于圖1所示的模式實(shí)現(xiàn)的。2.1 加密聊天室軟件需求分析1.通過(guò)socket實(shí)現(xiàn)手機(jī)間的通信。 2.通過(guò)DES加密程序在聊天室相互通信時(shí)實(shí)現(xiàn)時(shí)時(shí)加密,防止信息外泄。2.2 魚(yú)魚(yú)聊天室軟件功能模塊設(shè)計(jì) 一、手機(jī)端與服務(wù)器端的Socket通訊我們通常需要在手機(jī)中實(shí)現(xiàn)某些功能,而這些功能需要服務(wù)器提供服務(wù)

23、,因而在手機(jī)中需要建立與服務(wù)器之間的有效通信。在服務(wù)器端我們使用的是ServerSocket來(lái)創(chuàng)建服務(wù)socket,代碼如:ServerSocket server = new ServerSocket(4321);,這樣就打開(kāi)了一個(gè)ServerSocket,然后我們使用ServerSocket的accept方法來(lái)監(jiān)聽(tīng)客戶端建立的連接,該方法在沒(méi)有客戶端建立請(qǐng)求的時(shí)候會(huì)一直處于阻塞狀態(tài),直到有連接建立則形成Socket對(duì)象,服務(wù)器通常需要為多客戶端同時(shí)提供服務(wù),因此一般情況下,我們通過(guò)在一個(gè)循環(huán)中不斷監(jiān)聽(tīng)客戶端連接,并為每一個(gè)連接創(chuàng)建一個(gè)線程提供獨(dú)立服務(wù)。 1. ServerSocke

24、t server = new ServerSocket(4321);   2. while(true)    3. socket = server.accept();   4. new ServerThread(socket).start();   5.       然后在線程中打開(kāi)socket的通信數(shù)據(jù)流與客戶端進(jìn)行通訊。   

25、; 在JavaME中,與JavaSE的socket使用方式有些不同,在打開(kāi)Socket連接的時(shí)候,使用的不是Socket,而是SocketConnection,并由JavaME中的網(wǎng)絡(luò)連接類Connector的open方法來(lái)建立socket連接,同時(shí),由于open方法返回的是Connection對(duì)象,因此需要將其轉(zhuǎn)化為SocketConnection對(duì)象。 1. SocketConnection sc = (SocketConnection) Connector.open("socket:/127.0.0.1:4321"); 

26、;  這樣就打開(kāi)了一個(gè)socket連接對(duì)象,然后通過(guò)獲取該socket的通信流就可以跟服務(wù)器之間進(jìn)行數(shù)據(jù)交換。      二、手機(jī)端與手機(jī)端之間的Socket通訊有些開(kāi)發(fā)應(yīng)用中,實(shí)現(xiàn)了手機(jī)與手機(jī)之間直接的通訊,這就需要讓一個(gè)手機(jī)作為服務(wù)端,而另一手機(jī)作為客戶端來(lái)處理,作為客戶端的Socket使用方法與以上(一)中一樣,不同的主要是作為服務(wù)端的手機(jī)程序?qū)崿F(xiàn)。同樣的,在JavaME中并不是通過(guò)ServerSocket來(lái)創(chuàng)建服務(wù)Socket的,而是通過(guò)ServerSocketConnection來(lái)實(shí)現(xiàn),并且一樣是通過(guò)Connector來(lái)打開(kāi)

27、連接,使用的方法是acceptAndOpen,具體實(shí)現(xiàn)如下: 1. ServerSocketConnection ssc = (ServerSocketConnection)Connector.open("socket:/:1234");   2. SocketConnection sc = (SocketConnection)ssc.acceptAndOpen();      在得到SocketConnection對(duì)象之后便

28、可以通過(guò)獲取相應(yīng)的socket數(shù)據(jù)流進(jìn)行通信。 1. DataInputStream dis = sc.openDataOutputStream();   2. DataOutputStream dos = sc.openDataInputStream();      以上為分別對(duì)手機(jī)與服務(wù)器端之間、手機(jī)與手機(jī)之間通過(guò)Socket進(jìn)行通訊的基本方法。 作。3 魚(yú)魚(yú)聊天室軟件實(shí)現(xiàn)過(guò)程3.1 開(kāi)發(fā)環(huán)境與開(kāi)發(fā)工具的選擇3.1.1 開(kāi)發(fā)環(huán)境3.1.2 M

29、yEclipse集成開(kāi)發(fā)工具目前用于開(kāi)發(fā)的工具有很多,如MyEclipse,NetBeans,Borland uilder等。這些開(kāi)發(fā)工具很多且各有優(yōu)缺點(diǎn),由于我們要建j2me項(xiàng)目,于是我們優(yōu)先選擇MyEclipse作為我們的開(kāi)發(fā)工具。MyEclipse的可視化集成開(kāi)發(fā)環(huán)境包括文本編輯器、工程創(chuàng)建工具、對(duì)象瀏覽器和調(diào)試器等。還能把MySQL數(shù)據(jù)庫(kù),Tomcat服務(wù)器和JDK整合在一起,并且用戶可以在集成開(kāi)發(fā)環(huán)境中創(chuàng)建工程和打開(kāi)工程,建立、打開(kāi)和編輯文件,并可以編譯、運(yùn)行和調(diào)試應(yīng)用程序,極大限度地方便了魚(yú)魚(yú)聊天室快速高效地開(kāi)發(fā)和調(diào)試。3.2 魚(yú)魚(yú)聊天室軟件實(shí)現(xiàn)過(guò)程說(shuō)明35 Socket技術(shù)的代碼

30、實(shí)現(xiàn)聊天室import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.*;import javax.microedition.io.Connector;import javax.microedition.io.ServerSocketConnection;import javax.microedition.io.SocketConnection;import javax.microedition.lcdui mand;import javax.microedition.lcdui mandListe

31、ner;import javax.microedition.lcdui.Display;import javax.microedition.lcdui.Displayable;import javax.microedition.lcdui.Form;import javax.microedition.lcdui.TextField;import javax.microedition.midlet.MIDlet;import javax.microedition.midlet.MIDletStateChangeException;import javax.microedition.media.*

32、;import javax.microedition.media.control.*;public class server extends MIDlet implements CommandListener private Display display; private Form form = new Form("服務(wù)器聊天"); private Command cmd = new Command("發(fā)送",Command.SCREEN,-1); private Command cmd1 = new Command("設(shè)置密鑰",

33、Command.SCREEN,1); private TextField tf_msg = new TextField("請(qǐng)輸入:","",50,TextField.ANY);private Form form1 = new Form("設(shè)置");private Command cmd2 = new Command("返回",Command.BACK,1);private Command cmd3 = new Command("確定",Command.OK,1);private Command

34、cmd5=new Command("返回",Command.BACK,-2);private Command cmd6 = new Command("退出",Command.EXIT,0);private TextField tf_msg1 = new TextField("請(qǐng)輸入新密鑰:","",50,TextField.ANY); private ServerSocketConnection ssc = null; private SocketConnection sc = null;private Socke

35、tConnection sc1 = null; private DataInputStream dis = null; private DataOutputStream dos = null; private DataInputStream dis1 = null; private DataOutputStream dos1 = null; private InputStream input; key keypwd=new key(); private DES desy1 = new DES(); protected void destroyApp(boolean arg0) throws M

36、IDletStateChangeException protected void pauseApp() protected void startApp() throws MIDletStateChangeException display = Display.getDisplay(this); display.setCurrent(form); form.addCommand(cmd);form.addCommand(cmd1);form.addCommand(cmd5);form.addCommand(cmd6); form.append(tf_msg); form.setCommandLi

37、stener(this); try ssc = (ServerSocketConnection)Connector.open("socket:/:8888"); sc = (SocketConnection)ssc.acceptAndOpen();sc1 = (SocketConnection)ssc.acceptAndOpen(); dos = sc.openDataOutputStream(); dis = sc.openDataInputStream(); dos1 = sc1.openDataOutputStream(); dis1 = sc1.openDataIn

38、putStream(); new ChatThread().start(); catch(Exception ex) ex.printStackTrace(); public void commandAction(Command c, Displayable d) if(c = cmd) try String str = tf_msg.getString(); String k=keypwd.getkey();String s1 = desy1.strToDes(str, k); dos.writeUTF(s1); String s2 = desy1.desToStr(s1,k); form.

39、append("server say:" + s2 + "n"); catch(Exception ex) ex.printStackTrace(); if(c=cmd1) display.setCurrent(form1);form1.addCommand(cmd3); form1.addCommand(cmd2);form1.append(tf_msg1);form1.setCommandListener(this);if(c=cmd2)display.setCurrent(form);if(c=cmd3)String pwd=tf_msg1.get

40、String();keypwd.setkey(pwd);display.setCurrent(form);if(c=cmd5)display.setCurrent(form);if(c=cmd6)try destroyApp(false); catch(MIDletStateChangeException ex) notifyDestroyed(); class ChatThread extends Thread public void run() while(true) try String str = dis.readUTF(); String k=keypwd.getkey(); Str

41、ing s2 = desy1.desToStr(str, k); form.append("client say:" + s2 + "n"); catch(Exception ex) form.append("密碼不正確 無(wú)法接收信息n" ); ex.printStackTrace(); public static String inputStreamToString(InputStream in) throws IOException StringBuffer out = new StringBuffer(); byte b = n

42、ew byte4096; for (int n; (n = in.read(b) != -1;) out.append(new String(b, 0, n); return out.toString(); 3.5.3 小結(jié) 聊天室首先依靠socket實(shí)現(xiàn)手機(jī)間的通信。4 聊天室的通信加密import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.*;import javax.microedition.io.Connector;import javax.microedition.io.ServerS

43、ocketConnection;import javax.microedition.io.SocketConnection;import javax.microedition.lcdui mand;import javax.microedition.lcdui mandListener;import javax.microedition.lcdui.Display;import javax.microedition.lcdui.Displayable;import javax.microedition.lcdui.Form;import javax.microedition.lcdui.Tex

44、tField;import javax.microedition.midlet.MIDlet;import javax.microedition.midlet.MIDletStateChangeException;import javax.microedition.media.*;import javax.microedition.media.control.*;public class server extends MIDlet implements CommandListener private Display display; private Form form = new Form(&

45、quot;服務(wù)器聊天"); private Command cmd = new Command("發(fā)送",Command.SCREEN,-1); private Command cmd1 = new Command("設(shè)置密鑰",Command.SCREEN,1); private TextField tf_msg = new TextField("請(qǐng)輸入:","",50,TextField.ANY);private Form form1 = new Form("設(shè)置");privat

46、e Command cmd2 = new Command("返回",Command.BACK,1);private Command cmd3 = new Command("確定",Command.OK,1);private Command cmd5=new Command("返回",Command.BACK,-2);private Command cmd6 = new Command("退出",Command.EXIT,0);private TextField tf_msg1 = new TextField(&qu

47、ot;請(qǐng)輸入新密鑰:","",50,TextField.ANY); private ServerSocketConnection ssc = null; private SocketConnection sc = null;private SocketConnection sc1 = null; private DataInputStream dis = null; private DataOutputStream dos = null; private DataInputStream dis1 = null; private DataOutputStream d

48、os1 = null; private InputStream input; key keypwd=new key(); private DES desy1 = new DES(); protected void destroyApp(boolean arg0) throws MIDletStateChangeException protected void pauseApp() protected void startApp() throws MIDletStateChangeException display = Display.getDisplay(this); display.setC

49、urrent(form); form.addCommand(cmd);form.addCommand(cmd1);form.addCommand(cmd5);form.addCommand(cmd6); form.append(tf_msg); form.setCommandListener(this); try ssc = (ServerSocketConnection)Connector.open("socket:/:8888"); sc = (SocketConnection)ssc.acceptAndOpen();sc1 = (SocketConnection)ss

50、c.acceptAndOpen(); dos = sc.openDataOutputStream(); dis = sc.openDataInputStream(); dos1 = sc1.openDataOutputStream(); dis1 = sc1.openDataInputStream(); new ChatThread().start(); catch(Exception ex) ex.printStackTrace(); public void commandAction(Command c, Displayable d) if(c = cmd) try String str

51、= tf_msg.getString(); String k=keypwd.getkey();String s1 = desy1.strToDes(str, k); dos.writeUTF(s1); String s2 = desy1.desToStr(s1,k); form.append("server say:" + s2 + "n"); catch(Exception ex) ex.printStackTrace(); if(c=cmd1) display.setCurrent(form1);form1.addCommand(cmd3); form1.addCommand(cmd2);fo

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論