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

下載本文檔

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

文檔簡介

北京工業(yè)大學(xué)畢業(yè)論文題目基于J2ME的聊天室加密系統(tǒng)摘要本文闡述了如何使用J2ME的Socket編程技術(shù)編寫一個手機(jī)的通信類聊天軟件并集成DES加密程序進(jìn)行時時加密,著重討論了從設(shè)計(jì)到實(shí)現(xiàn)軟件的具體過程與如何利用J2ME,socket,DES等技術(shù)實(shí)現(xiàn)程序代碼。聊天室系統(tǒng)具有安全與流暢的網(wǎng)絡(luò)通信效果。軟件運(yùn)行速度快、安全性好,也很穩(wěn)定。關(guān)鍵詞:聊天室J2MESocketDES目錄1前言11.1課題來源11.1.1課題背景11.1.2課題選擇11.2課題技術(shù)簡介21.2.1J2me簡介21.2.2JVM(虛擬機(jī))31.2.3MIDP(移動信息設(shè)備簡表)41.2.4Socket41.2.5Swing51.2.6MySQL51.2.7JDBC61.2.8B/S結(jié)構(gòu)71.2.9JSP72軟件需求分析、模塊設(shè)計(jì)和實(shí)現(xiàn)原理82.1魚魚聊天室軟件需求分析82.2魚魚聊天室軟件功能模塊設(shè)計(jì)82.2.1Web服務(wù)器程序(B/S)82.2.2桌面程序服務(wù)器端(C/S的Server服務(wù)器端)92.2.3桌面程序客戶端(C/S的Client客戶端)92.3魚魚聊天室軟件用例圖92.4軟件實(shí)現(xiàn)原理與具體流程103魚魚聊天室軟件實(shí)現(xiàn)過程143.1開發(fā)環(huán)境與開發(fā)工具的選擇143.1.1開發(fā)環(huán)境143.1.2MyEclipse集成開發(fā)工具143.1.3Dreamweaver8網(wǎng)頁界面開發(fā)工具143.2魚魚聊天室軟件實(shí)現(xiàn)過程說明143.3軟件開發(fā)進(jìn)度實(shí)錄153.4魚魚聊天室V2.6.1文件結(jié)構(gòu)203.4.1客戶端程序結(jié)構(gòu)(JoyuClient)203.4.2服務(wù)器端程序結(jié)構(gòu)(SayuServer)223.4.3Web服務(wù)器端程序結(jié)構(gòu)(JoyuWebService)233.4.4服務(wù)器端(JoyuWebService和SayuServer)用到的數(shù)據(jù)庫結(jié)構(gòu)233.5Socket技術(shù)的代碼實(shí)現(xiàn)——魚魚聊天室V1.0243.5.1魚魚聊天室V1.0中的客戶端代碼243.5.2魚魚聊天室V1.0中的服務(wù)器端代碼283.5.3小結(jié)334魚魚聊天室的部署與運(yùn)行334.1部署334.1.1本地部署334.1.2一般部署344.2運(yùn)行365結(jié)語36參考文獻(xiàn)37TheImplementationandDevelopmentofJoyu38附錄A:附帶光盤容39附錄B:魚魚聊天室運(yùn)行效果部分貼圖42致51仲愷農(nóng)業(yè)工程學(xué)院畢業(yè)論文(設(shè)計(jì))成績評定表521前言1.1課題來源1.1.1課題背景◆手機(jī)網(wǎng)絡(luò)技術(shù)眾所周知手機(jī)無線網(wǎng)絡(luò)技術(shù)是手機(jī)領(lǐng)域中發(fā)展最為迅速的技術(shù)之一,它在政治、經(jīng)濟(jì)、生活等各個方面發(fā)揮著十分重要的作用。隨著手機(jī)無線網(wǎng)絡(luò)的普與和推廣,將會有越來越多的人利用手機(jī)網(wǎng)上資源,享受不斷發(fā)展和完善的手機(jī)網(wǎng)絡(luò)服務(wù),以此來提高工作效率和水平。隨著我國經(jīng)濟(jì)發(fā)展和手機(jī)無線網(wǎng)絡(luò)的普與,手機(jī)網(wǎng)絡(luò)技術(shù)已成為人們生活不可或缺的一部分◆聊天室隨著手機(jī)的日益普與,短信業(yè)務(wù)的一些缺點(diǎn)也日益顯現(xiàn):(1)不能實(shí)現(xiàn)一天短信發(fā)送到多個不同的手機(jī)號(部分手機(jī)群發(fā)功能只是將短信反復(fù)發(fā)送,實(shí)際需反復(fù)收費(fèi))。(2)短信長度受到限制。針對短信業(yè)務(wù)的不足,利用手機(jī)能夠方便的接入無線網(wǎng)絡(luò)的優(yōu)勢,手機(jī)聊天室應(yīng)運(yùn)而生。他實(shí)現(xiàn)了多人之間較為便捷的交流?!羰謾C(jī)病毒隨著智能手機(jī)的不斷普與,手機(jī)病毒成為了病毒發(fā)展的下一個目標(biāo)。手機(jī)病毒是一種破壞性程序,和計(jì)算機(jī)病毒(程序)一樣具有傳染性、破壞性。手機(jī)病毒可利用發(fā)送短信、彩信,電子,瀏覽,下載鈴聲,藍(lán)牙等方式進(jìn)行傳播。手機(jī)病毒可能會導(dǎo)致用戶手機(jī)死機(jī)、關(guān)機(jī)、資料被刪、向外發(fā)送垃圾、撥打等,甚至還會損毀SIM卡、芯片等硬件。如今手機(jī)病毒,受到PC病毒的啟發(fā)與影響,也有所謂混合式攻擊的手法出現(xiàn)?!艟W(wǎng)絡(luò)加密技術(shù)在常規(guī)密碼中,收信方和發(fā)信方使用一樣的密鑰,即加密密鑰和解密密鑰是一樣或等價的。比較著名的常規(guī)密碼算法有:美國的DES與其各種變形,比如TripleDES、GDES、NewDES和DES的前身Lucifer;歐洲的IDEA;日本的FEAL?N、LOKI?91、Skipjack、RC4、RC5以與以代換密碼和轉(zhuǎn)輪密碼為代表的古典密碼等。在眾多的常規(guī)密碼中影響最大的是DES密碼。常規(guī)密碼的優(yōu)點(diǎn)是有很強(qiáng)的強(qiáng)度,且經(jīng)受住時間的檢驗(yàn)和攻擊,但其密鑰必須通過安全的途徑傳送。因此,其密鑰管理成為系統(tǒng)安全的重要因素。在公鑰密碼中,收信方和發(fā)信方使用的密鑰互不一樣,而且?guī)缀醪豢赡軓募用苊荑€推導(dǎo)解密密鑰。比較著名的公鑰密碼算法有:RSA、背包密碼、McEliece密碼、Diffe?Hellman、Rabin、Ong?Fiat?Shamir、零知識證明的算法、橢圓曲線、EIGamal算法等等。最有影響的公鑰密碼算法是RSA,它能抵抗到目前為止已知的所有密碼攻擊。公鑰密碼的優(yōu)點(diǎn)是可以適應(yīng)網(wǎng)絡(luò)的開放性要求,且密鑰管理問題也較為簡單,尤其可方便的實(shí)現(xiàn)數(shù)字簽名和驗(yàn)證。但其算法復(fù)雜,加密數(shù)據(jù)的速率較低。盡管如此,隨著現(xiàn)代電子技術(shù)和密碼技術(shù)的發(fā)展,公鑰密碼算法將是一種很有前途的網(wǎng)絡(luò)安全加密體制。當(dāng)然在實(shí)際應(yīng)用中人們通常將常規(guī)密碼和公鑰密碼結(jié)合在一起使用,比如:利用DES或者IDEA來加密信息,而采用RSA來傳遞會話密鑰。如果按照每次加密所處理的比特來分類,可以將加密算法分為序列密碼和分組密碼。前者每次只加密一個比特而后者則先將信息序列分組,每次處理一個組。密碼技術(shù)是網(wǎng)絡(luò)安全最有效的技術(shù)之一。一個加密網(wǎng)絡(luò),不但可以防止非授權(quán)用戶的搭線竊聽和入網(wǎng),而且也是對付惡意軟件的有效方法之一。◆J2MEJavaME以往稱作J2ME(JavaPlatform,MicroEdition),是為機(jī)頂盒、移動和PDA之類嵌入式消費(fèi)電子設(shè)備提供的Java語言平臺,包括虛擬機(jī)和一系列標(biāo)準(zhǔn)化的JavaAPI。它和JavaSE、JavaEE一起構(gòu)成Java技術(shù)的三大版本,并且同樣是通過JCP(JavaCommunityProcess)制訂的。根據(jù)Sun的定義:JavaME是一種高度優(yōu)化的Java運(yùn)行環(huán)境,主要針對消費(fèi)類電子設(shè)備的,例如蜂窩和可視、數(shù)字機(jī)頂盒、汽車導(dǎo)航系統(tǒng)等等。JAVAME技術(shù)在1999年的JavaOneDeveloperConference大會上正式推出,它將Java語言的與平臺無關(guān)的特性移植到小型電子設(shè)備上,允許移動無線設(shè)備之間共享應(yīng)用程序。1.1.2課題選擇出于上述各種背景考慮,我決定開發(fā)一個基于j2me技術(shù)的手機(jī)加密聊天室軟件。此聊天室雖然其功能簡單,但是在其設(shè)計(jì)與開發(fā)過程中,能夠充分學(xué)習(xí)和使用J2me以與DES加密算法技術(shù);實(shí)現(xiàn)群聊功能用到基于Cliet/Server的面向連接的Socket編程技術(shù),并在程序中加入DES加密;1.2課題技術(shù)簡介1.2.1J2me簡介 J2ME的全稱是Java2MicroEdition(J2ME)——Java2技術(shù)微型版,與J2SE、J2EE一樣都是有美國SUN微系統(tǒng)公司提出的JAVA技術(shù)規(guī)。J2ME是為了能夠開發(fā)運(yùn)行在小型設(shè)備、獨(dú)立設(shè)備、互聯(lián)移動設(shè)備、嵌入式設(shè)備上的JAVA應(yīng)用程序而被提出的。J2ME是建立在一個由概要描述、配置、JAVA虛擬機(jī)和操作系統(tǒng)等部分組成的標(biāo)準(zhǔn)架構(gòu)之上的,這些容共同組成了完整的J2ME實(shí)時運(yùn)行環(huán)境。它的技術(shù)核心是由一個JAVA虛擬機(jī)(JVM)與一套適合運(yùn)行在上述設(shè)備環(huán)境上的API接口構(gòu)成。 J2ME在1999年的JavaOne開發(fā)人員大會上初次亮相,它的目標(biāo)是面向智能無線設(shè)備和小型計(jì)算設(shè)備的開發(fā)人員,這些開發(fā)人員需要在他們的產(chǎn)品中整合跨平臺的能力。 無線設(shè)備和小型計(jì)算設(shè)備的消費(fèi)者期望這些設(shè)備能夠有較高的性能。他們希望小型計(jì)算設(shè)備有快速的響應(yīng)時間,與同種設(shè)備相兼容,擁有功能完備的應(yīng)用程序。消費(fèi)者希望桌面計(jì)算機(jī)和筆記本電腦上的軟件和功能同樣能夠運(yùn)行在移動和個人數(shù)字助理上。 為了滿足他們的需求,開發(fā)人員必須重新考慮他們設(shè)計(jì)計(jì)算機(jī)系統(tǒng)的方式。開發(fā)人員需要利用商業(yè)計(jì)算機(jī)上現(xiàn)有的前端和后端軟件的計(jì)算能力,并將這些能力傳遞到微型、移動和無線的計(jì)算設(shè)備上。J2ME能夠以最小的修改來實(shí)現(xiàn)這種傳遞,如果應(yīng)用程序的設(shè)計(jì)是可伸縮的,應(yīng)用程序就可以適應(yīng)小型計(jì)算設(shè)備上有限的資源。 J2ME為在小型電子設(shè)備上創(chuàng)建性能卓越的網(wǎng)絡(luò)應(yīng)用提供了一套完整的解決方案,能很好的解決軟件跨平臺的兼容性和安全性的問題。[5]2.2.1J2ME架構(gòu) J2ME架構(gòu)的模塊化設(shè)計(jì)使應(yīng)用程序可以靈活適應(yīng)小型計(jì)算設(shè)備的限制。J2ME架構(gòu)沒有替代小型計(jì)算設(shè)備的操作系統(tǒng)。相反,J2ME架構(gòu)由位于原生操作系統(tǒng)之上的多層軟件組成,這些軟件共同稱為“連接有限設(shè)備配置”(ConnectedLimitedDeviceConfiguration,CLDC)。安裝在操作系統(tǒng)之上的CLDC形成了小型計(jì)算設(shè)備的運(yùn)行時環(huán)境。 J2ME架構(gòu)由3個軟件層組成:第一層是包括在的配置層,這個層次直接與原生操作系統(tǒng)進(jìn)行交互。配置層還處理profile和JVM之間的交互。第二層是profile層,由小型計(jì)算設(shè)備的應(yīng)用程序編程接口(API)的最小集合組成。第三層是MobileInformationDeviceProfile(MIDP)層。MIDP層由用戶網(wǎng)絡(luò)連接、永久存儲和用戶界面的javaAPI組成。它還能夠訪問CLDC庫和MIDP庫。2.2.2JVM(虛擬機(jī)) JVM是專門為微型電子設(shè)備與資源受限設(shè)備如:手機(jī)、尋呼機(jī)、移動互聯(lián)網(wǎng)設(shè)備、家用微電子設(shè)備等設(shè)計(jì)的一種輕便、緊湊的JAVA虛擬機(jī)。 JVM可以為微型電子設(shè)備提供一個完整的JAVA運(yùn)行環(huán)境,除了一些微型設(shè)備所必需的適當(dāng)?shù)墓δ苡兴煌猓怯蒍AVA虛擬機(jī)規(guī)定義的真實(shí)的JAVA虛擬機(jī)。它是專門為那些受資源限制,只有幾百K字節(jié)存的微型設(shè)備設(shè)計(jì)的。 JVM起初是由SUN微系統(tǒng)實(shí)驗(yàn)室為一個名叫“Spotless”的項(xiàng)目創(chuàng)建的。它的目標(biāo)是為資源受限制的Palm(是目前較為流行的掌上電腦操作系統(tǒng))可連接的電子設(shè)備,實(shí)現(xiàn)一個java虛擬機(jī)。 基于上述原因,JVM具有以下幾個特點(diǎn): (1)小,僅具有40KB至80KB的靜態(tài)存。 (2)輕便、精巧。 (3)模塊化并可定制。 (4)盡可能完全緊湊的完成設(shè)計(jì)目的。2.2.3MIDP(移動信息設(shè)備簡表) MIDP是專門為互聯(lián)受限設(shè)備配置設(shè)計(jì)的,它為移動設(shè)備提供了一套API集合,MIDP包含用戶界面類、持久存儲功能與網(wǎng)絡(luò)功能。它同時也包括一個供用戶下載新應(yīng)用到終端設(shè)備的標(biāo)準(zhǔn)運(yùn)行環(huán)境。運(yùn)行在MIDP下的小應(yīng)用程序叫做MIDlet移動設(shè)備小應(yīng)用程序,它與Applet類似。MIDP要求平臺設(shè)備提供一個機(jī)制用來存儲簡單的數(shù)據(jù)記錄,通過正常的平臺事件,比如重新啟動和電池更新維護(hù)系統(tǒng)的完整性。 MIDP是以SUN、Motorola、Nokia為中心的MIDPEG組織(MobileInformationProfileExpertGroup)所制訂出來使用在CLDC上的Profile,是以能使用在移動、雙向?qū)χv機(jī)、可無線通信的PDA(個人數(shù)字助理)上面為前提設(shè)計(jì)出來的。另外,像日本國的NTTDoCoMo、J-PHONE、KDDI等電信商與移動制造商也都曾參與了MIDPEG。 MIDP是在CLDC 的功能上附加提供適合目標(biāo)設(shè)備用的GUI與事件處理功能。這樣一來,就可以當(dāng)成MIDP應(yīng)用程序(MIDlet)來運(yùn)行了。 MIDP由于是由多個企業(yè)所共同策劃出來的開放標(biāo)準(zhǔn),因此主要的移動制造商也會制造出大量的對應(yīng)機(jī)種。也就是說,以MIDP為基準(zhǔn)所制作出來的應(yīng)用程序,也將可以在流通于市面上的移動上執(zhí)行。 另外,MIDP不僅限于移動,也已經(jīng)被移植到PDAPalmOS上,而以MIDPforPalmOS的名字來稱呼(與KJava是不同的)。在不使用各電信商的擴(kuò)展API的時候,制作給移動用的MIDlet也將可以使用在PalmOS上面。由于未來MIDP也將會搭載到不同設(shè)備之上,也由于其兼容性高,只要寫過一次程序,就可以在其他移動或是移動以外的設(shè)備上執(zhí)行;而這也就是它最大的好處。2軟件需求分析、模塊設(shè)計(jì)和實(shí)現(xiàn)原理1.5DES加密算法1DES算法原理DES算法是一種分組加密算法,他以64位的分組數(shù)據(jù)進(jìn)行加解密,數(shù)據(jù)加密和解密使用一樣的算法結(jié)構(gòu),只是密鑰的使用順序不同。蜜鑰通常為64位,但每個第8位都用作奇偶校驗(yàn),實(shí)際密鑰長度為56位。DES算法的性取決于密鑰,但只有極少數(shù)的密鑰被認(rèn)為是弱密鑰,所以在實(shí)際的應(yīng)用中可以很容易避免。圖1為DES算法的流程圖。DES算法的基本流程如下:首先,輸入明文通過初始置換,將其分成左、右各為32位的兩個部分,然后進(jìn)行16輪完全一樣的運(yùn)算。經(jīng)過16輪運(yùn)算后,左、右半部分合并在一起經(jīng)過一個末置換(初始置換的逆置換),于是整個算法結(jié)束。在每一輪運(yùn)算中,密鑰位移位,然后再從密鑰的56位中選取48位。通過一個擴(kuò)展置換,將數(shù)據(jù)的右半部分?jǐn)U展為48位,并通過一個異或操作與一個48位密鑰結(jié)合,通過8個S盒將這48位替代成新的32位數(shù)據(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)比較簡單,具體可參考文獻(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)參照圖2,首先將數(shù)據(jù)的右半部分?jǐn)U展為48位數(shù)據(jù),該操作的目的是產(chǎn)生與密鑰同長度的數(shù)據(jù)以進(jìn)行異或操作。異或操作的結(jié)果(48位)進(jìn)行S盒替代,將數(shù)據(jù)壓縮為32位。每個S盒都有6位的輸入,4位的輸出,48位的輸入被分為8個6位的分組,每一個分組對應(yīng)一個S盒替代操作。每個S盒是一個4行、16列的表,輸入位以一種特殊的方式確定S盒中的項(xiàng)。假定將S盒的6位輸入標(biāo)記為x0,x1,x2,x3,x4,x5。則x0和x5組合成2位的數(shù),從0~3,對應(yīng)表中的一行,x2~x5構(gòu)成一個4位的數(shù),從0~15,對應(yīng)表中的一列。限于篇幅,本文僅給出S1盒的置換,具體如表1所示。1.2.4SocketSocket通常也稱作"套接字",用于描述IP地址和端口,是一個通信鏈的句柄。應(yīng)用程序通常通過"套接字"向網(wǎng)絡(luò)發(fā)出請求或者應(yīng)答網(wǎng)絡(luò)請求。Socket接口是TCP/IP網(wǎng)絡(luò)的API,Socket接口定義了許多函數(shù)或例程,程序員可以用它們來開發(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也具有一個類似于打開文件的函數(shù)調(diào)用Socket(),該函數(shù)返回一個整型的Socket描述符,隨后的連接建立、數(shù)據(jù)傳輸?shù)炔僮鞫际峭ㄟ^該Socket實(shí)現(xiàn)的。下面是一個經(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.通過socket實(shí)現(xiàn)手機(jī)間的通信。2.通過DES加密程序在聊天室相互通信時實(shí)現(xiàn)時時加密,防止信息外泄。2.2魚魚聊天室軟件功能模塊設(shè)計(jì)一、手機(jī)端與服務(wù)器端的Socket通訊我們通常需要在手機(jī)中實(shí)現(xiàn)某些功能,而這些功能需要服務(wù)器提供服務(wù),因而在手機(jī)中需要建立與服務(wù)器之間的有效通信。在服務(wù)器端我們使用的是ServerSocket來創(chuàng)建服務(wù)socket,代碼如:ServerSocketserver=newServerSocket(4321);,這樣就打開了一個ServerSocket,然后我們使用ServerSocket的accept方法來監(jiān)聽客戶端建立的連接,該方法在沒有客戶端建立請求的時候會一直處于阻塞狀態(tài),直到有連接建立則形成Socket對象,服務(wù)器通常需要為多客戶端同時提供服務(wù),因此一般情況下,我們通過在一個循環(huán)中不斷監(jiān)聽客戶端連接,并為每一個連接創(chuàng)建一個線程提供獨(dú)立服務(wù)。

ServerSocket

server

=

new

ServerSocket(4321);

while(true)

{

socket

=

server.accept();

new

ServerThread(socket).start();

}

然后在線程中打開socket的通信數(shù)據(jù)流與客戶端進(jìn)行通訊。

在JavaME中,與JavaSE的socket使用方式有些不同,在打開Socket連接的時候,使用的不是Socket,而是SocketConnection,并由JavaME中的網(wǎng)絡(luò)連接類Connector的open方法來建立socket連接,同時,由于open方法返回的是Connection對象,因此需要將其轉(zhuǎn)化為SocketConnection對象。SocketConnection

sc

=

(SocketConnection)

Connector.open("socket://:4321");

這樣就打開了一個socket連接對象,然后通過獲取該socket的通信流就可以跟服務(wù)器之間進(jìn)行數(shù)據(jù)交換。

二、手機(jī)端與手機(jī)端之間的Socket通訊有些開發(fā)應(yīng)用中,實(shí)現(xiàn)了手機(jī)與手機(jī)之間直接的通訊,這就需要讓一個手機(jī)作為服務(wù)端,而另一手機(jī)作為客戶端來處理,作為客戶端的Socket使用方法與以上(一)中一樣,不同的主要是作為服務(wù)端的手機(jī)程序?qū)崿F(xiàn)。同樣的,在JavaME中并不是通過ServerSocket來創(chuàng)建服務(wù)Socket的,而是通過ServerSocketConnection來實(shí)現(xiàn),并且一樣是通過Connector來打開連接,使用的方法是acceptAndOpen,具體實(shí)現(xiàn)如下:

ServerSocketConnection

ssc

=

(ServerSocketConnection)Connector.open("socket://:1234");

SocketConnection

sc

=

(SocketConnection)ssc.acceptAndOpen();

在得到SocketConnection對象之后便可以通過獲取相應(yīng)的socket數(shù)據(jù)流進(jìn)行通信。

DataInputStream

dis

=

sc.openDataOutputStream();

DataOutputStream

dos

=

sc.openDataInputStream();

以上為分別對手機(jī)與服務(wù)器端之間、手機(jī)與手機(jī)之間通過Socket進(jìn)行通訊的基本方法。

作。3魚魚聊天室軟件實(shí)現(xiàn)過程3.1開發(fā)環(huán)境與開發(fā)工具的選擇3.1.1開發(fā)環(huán)境3.1.2MyEclipse集成開發(fā)工具目前用于開發(fā)的工具有很多,如MyEclipse,NetBeans,Borlanduilder等。這些開發(fā)工具很多且各有優(yōu)缺點(diǎn),由于我們要建j2me項(xiàng)目,于是我們優(yōu)先選擇MyEclipse作為我們的開發(fā)工具。MyEclipse的可視化集成開發(fā)環(huán)境包括文本編輯器、工程創(chuàng)建工具、對象瀏覽器和調(diào)試器等。還能把MySQL數(shù)據(jù)庫,Tomcat服務(wù)器和JDK整合在一起,并且用戶可以在集成開發(fā)環(huán)境中創(chuàng)建工程和打開工程,建立、打開和編輯文件,并可以編譯、運(yùn)行和調(diào)試應(yīng)用程序,極大限度地方便了魚魚聊天室快速高效地開發(fā)和調(diào)試。3.2魚魚聊天室軟件實(shí)現(xiàn)過程說明3.5Socket技術(shù)的代碼實(shí)現(xiàn)——聊天室importjava.io.DataInputStream;importjava.io.DataOutputStream;importjava.io.*;importjavax.microedition.io.Connector;importjavax.microedition.io.ServerSocketConnection;importjavax.microedition.io.SocketConnection;importjavax.microedition.lcduimand;importjavax.microedition.lcduimandListener;importjavax.microedition.lcdui.Display;importjavax.microedition.lcdui.Displayable;importjavax.microedition.lcdui.Form;importjavax.microedition.lcdui.TextField;importjavax.microedition.midlet.MIDlet;importjavax.microedition.midlet.MIDletStateChangeException;importjavax.microedition.media.*;importjavax.microedition.media.control.*;publicclassserverextendsMIDletimplementsCommandListener{privateDisplaydisplay;privateFormform=newForm("服務(wù)器聊天");privateCommandcmd=newCommand("發(fā)送",Command.SCREEN,-1);privateCommandcmd1=newCommand("設(shè)置密鑰",Command.SCREEN,1);privateTextFieldtf_msg=newTextField("請輸入:","",50,TextField.ANY);privateFormform1=newForm("設(shè)置");privateCommandcmd2=newCommand("返回",Command.BACK,1);privateCommandcmd3=newCommand("確定",Command.OK,1);privateCommandcmd5=newCommand("返回",Command.BACK,-2);privateCommandcmd6=newCommand("退出",Command.EXIT,0);privateTextFieldtf_msg1=newTextField("請輸入新密鑰:","",50,TextField.ANY);privateServerSocketConnectionssc=null;privateSocketConnectionsc=null;privateSocketConnectionsc1=null;privateDataInputStreamdis=null;privateDataOutputStreamdos=null;privateDataInputStreamdis1=null;privateDataOutputStreamdos1=null;privateInputStreaminput;keykeypwd=newkey();privateDESdesy1=newDES();protectedvoiddestroyApp(booleanarg0)throwsMIDletStateChangeException{}protectedvoidpauseApp(){}protectedvoidstartApp()throwsMIDletStateChangeException{display=Display.getDisplay(this);display.setCurrent(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)ssc.acceptAndOpen();dos=sc.openDataOutputStream();dis=sc.openDataInputStream();dos1=sc1.openDataOutputStream();dis1=sc1.openDataInputStream();newChatThread().start();}catch(Exceptionex){ex.printStackTrace();}}publicvoidcommandAction(Commandc,Displayabled){if(c==cmd){try{Stringstr=tf_msg.getString();Stringk=keypwd.getkey(); Strings1=desy1.strToDes(str,k);dos.writeUTF(s1);Strings2=desy1.desToStr(s1,k);form.append("serversay:"+s2+"\n");}catch(Exceptionex){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){Stringpwd=tf_msg1.getString();keypwd.setkey(pwd);display.setCurrent(form);}if(c==cmd5){display.setCurrent(form);}if(c==cmd6){try{destroyApp(false);}catch(MIDletStateChangeExceptionex){}notifyDestroyed();}}classChatThreadextendsThread{publicvoidrun(){while(true){try{Stringstr=dis.readUTF();Stringk=keypwd.getkey();Strings2=desy1.desToStr(str,k);form.append("clientsay:"+s2+"\n");}catch(Exceptionex){form.append("密碼不正確無法接收信息\n");ex.printStackTrace();}}}}publicstaticStringinputStreamToString(InputStreamin)throwsIOException{StringBufferout=newStringBuffer();byte[]b=newbyte[4096];for(intn;(n=in.read(b))!=-1;){out.append(newString(b,0,n));}returnout.toString();}}3.5.3小結(jié)聊天室首先依靠socket實(shí)現(xiàn)手機(jī)間的通信。4聊天室的通信加密importjava.io.DataInputStream;importjava.io.DataOutputStream;importjava.io.*;importjavax.microedition.io.Connector;importjavax.microedition.io.ServerSocketConnection;importjavax.microedition.io.SocketConnection;importjavax.microedition.lcduimand;importjavax.microedition.lcduimandListener;importjavax.microedition.lcdui.Display;importjavax.microedition.lcdui.Displayable;importjavax.microedition.lcdui.Form;importjavax.microedition.lcdui.TextField;importjavax.microedition.midlet.MIDlet;importjavax.microedition.midlet.MIDletStateChangeException;importjavax.microedition.media.*;importjavax.microedition.media.control.*;publicclassserverextendsMIDletimplementsCommandListener{privateDisplaydisplay;privateFormform=newForm("服務(wù)器聊天");privateCommandcmd=newCommand("發(fā)送",Command.SCREEN,-1);privateCommandcmd1=newCommand("設(shè)置密鑰",Command.SCREEN,1);privateTextFieldtf_msg=newTextField("請輸入:","",50,TextField.ANY);privateFormform1=newForm("設(shè)置");privateCommandcmd2=newCommand("返回",Command.BACK,1);privateCommandcmd3=newCommand("確定",Command.OK,1);privateCommandcmd5=newCommand("返回",Command.BACK,-2);privateCommandcmd6=newCommand("退出",Command.EXIT,0);privateTextFieldtf_msg1=newTextField("請輸入新密鑰:","",50,TextField.ANY);privateServerSocketConnectionssc=null;privateSocketConnectionsc=null;privateSocketConnectionsc1=null;privateDataInputStreamdis=null;privateDataOutputStreamdos=null;privateDataInputStreamdis1=null;privateDataOutputStreamdos1=null;privateInputStreaminput;keykeypwd=newkey();privateDESdesy1=newDES();protectedvoiddestroyApp(booleanarg0)throwsMIDletStateChangeException{}protectedvoidpauseApp(){}protectedvoidstartApp()throwsMIDletStateChangeException{display=Display.getDisplay(this);display.setCurrent(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)ssc.acceptAndOpen();dos=sc.openDataOutputStream();dis=sc.openDataInputStream();dos1=sc1.openDataOutputStream();dis1=sc1.openDataInputStream();newChatThread().start();}catch(Exceptionex){ex.printStackTrace();}}publicvoidcommandAction(Commandc,Displayabled){if(c==cmd){try{Stringstr=tf_msg.getString();Stringk=keypwd.getkey(); Strings1=desy1.strToDes(str,k);dos.writeUTF(s1);Strings2=desy1.desToStr(s1,k);form.append("serversay:"+s2+"\n");}catch(Exceptionex){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){Stringpwd=tf_msg1.getString();keypwd.setkey(pwd);display.setCurrent(form);}if(c==cmd5){display.setCurrent(form

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論