畢業(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ù)免費閱讀

下載本文檔

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

文檔簡介

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

ServerSocket

server

=

new

ServerSocket(4321);

while(true)

{

socket

=

server.accept();

new

ServerThread(socket).start();

}

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

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

sc

=

(SocketConnection)

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

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

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

ServerSocketConnection

ssc

=

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

SocketConnection

sc

=

(SocketConnection)ssc.acceptAndOpen();

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

DataInputStream

dis

=

sc.openDataOutputStream();

DataOutputStream

dos

=

sc.openDataInputStream();

以上為分別對手機與服務器端之間、手機與手機之間通過Socket進行通訊的基本方法。

作。3魚魚聊天室軟件實現(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)缺點,由于我們要建j2me項目,于是我們優(yōu)先選擇MyEclipse作為我們的開發(fā)工具。MyEclipse的可視化集成開發(fā)環(huán)境包括文本編輯器、工程創(chuàng)建工具、對象瀏覽器和調(diào)試器等。還能把MySQL數(shù)據(jù)庫,Tomcat服務器和JDK整合在一起,并且用戶可以在集成開發(fā)環(huán)境中創(chuàng)建工程和打開工程,建立、打開和編輯文件,并可以編譯、運行和調(diào)試應用程序,極大限度地方便了魚魚聊天室快速高效地開發(fā)和調(diào)試。3.2魚魚聊天室軟件實現(xiàn)過程說明3.5Socket技術的代碼實現(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("服務器聊天");privateCommandcmd=newCommand("發(fā)送",Command.SCREEN,-1);privateCommandcmd1=newCommand("設置密鑰",Command.SCREEN,1);privateTextFieldtf_msg=newTextField("請輸入:","",50,TextField.ANY);privateFormform1=newForm("設置");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實現(xiàn)手機間的通信。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("服務器聊天");privateCommandcmd=newCommand("發(fā)送",Command.SCREEN,-1);privateCommandcmd1=newCommand("設置密鑰",Command.SCREEN,1);privateTextFieldtf_msg=newTextField("請輸入:","",50,TextField.ANY);privateFormform1=newForm("設置");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)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論