![畢業(yè)論文基于J2ME的聊天室加密系統(tǒng)方案_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/17/4b25f128-92ab-488f-a4c4-c1cead714ffb/4b25f128-92ab-488f-a4c4-c1cead714ffb1.gif)
![畢業(yè)論文基于J2ME的聊天室加密系統(tǒng)方案_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/17/4b25f128-92ab-488f-a4c4-c1cead714ffb/4b25f128-92ab-488f-a4c4-c1cead714ffb2.gif)
![畢業(yè)論文基于J2ME的聊天室加密系統(tǒng)方案_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/17/4b25f128-92ab-488f-a4c4-c1cead714ffb/4b25f128-92ab-488f-a4c4-c1cead714ffb3.gif)
![畢業(yè)論文基于J2ME的聊天室加密系統(tǒng)方案_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/17/4b25f128-92ab-488f-a4c4-c1cead714ffb/4b25f128-92ab-488f-a4c4-c1cead714ffb4.gif)
![畢業(yè)論文基于J2ME的聊天室加密系統(tǒng)方案_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/17/4b25f128-92ab-488f-a4c4-c1cead714ffb/4b25f128-92ab-488f-a4c4-c1cead714ffb5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、北 京 工 業(yè) 大 學(xué)畢業(yè)論文 題 目 基于J2ME的聊天室加密系統(tǒng)20 / 24摘 要 本文闡述了如何使用J2ME的Socket編程技術(shù)編寫一個手機的通信類聊天軟件并集成DES加密程序進行時時加密,著重討論了從設(shè)計到實現(xiàn)軟件的具體過程與如何利用J2ME,socket,DES等技術(shù)實現(xiàn)程序代碼。 聊天室系統(tǒng)具有安全與流暢的網(wǎng)絡(luò)通信效果。軟件運行速度快、安全性好,也很穩(wěn)定。關(guān)鍵詞:聊天室 J2ME SocketDES目 錄1 前言11.1 課題來源11.1.1 課題背景11.1.2 課題選擇11.2 課題技術(shù)簡介21.2.1 J2me簡介21.2.2 JVM(虛擬機)31.2.3 MIDP(移動
2、信息設(shè)備簡表)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è)計和實現(xiàn)原理82.1 魚魚聊天室軟件需求分析82.2 魚魚聊天室軟件功能模塊設(shè)計82.2.1 Web服務(wù)器程序(B/S)82.2.2 桌面程序服務(wù)器端(C/S的Server服務(wù)器端)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.2 MyEcli
3、pse集成開發(fā)工具143.1.3 Dreamweaver8網(wǎng)頁界面開發(fā)工具143.2 魚魚聊天室軟件實現(xiàn)過程說明143.3 軟件開發(fā)進度實錄153.4 魚魚聊天室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ù)庫結(jié)構(gòu)2335 Socket技術(shù)的代碼實現(xiàn)魚魚聊天室V1.0243.5.1 魚魚聊天室V1.0中的客戶端代碼243.5.2 魚魚聊天室V1.
4、0中的服務(wù)器端代碼283.5.3 小結(jié)334 魚魚聊天室的部署與運行334.1 部署334.1.1 本地部署334.1.2 一般部署344.2 運行365 結(jié)語36參考文獻37The Implementation and Development of Joyu 38附錄A:附帶光盤容39附錄B:魚魚聊天室運行效果部分貼圖42致51仲愷農(nóng)業(yè)工程學(xué)院畢業(yè)論文(設(shè)計)成績評定表521 前言1.1 課題來源1.1.1 課題背景手機網(wǎng)絡(luò)技術(shù)眾所周知手機無線網(wǎng)絡(luò)技術(shù)是手機領(lǐng)域中發(fā)展最為迅速的技術(shù)之一,它在政治、經(jīng)濟、生活等各個方面發(fā)揮著十分重要的作用。隨著手機無線網(wǎng)絡(luò)的普與和推廣,將會有越來越多的人利用手
5、機網(wǎng)上資源,享受不斷發(fā)展和完善的手機網(wǎng)絡(luò)服務(wù),以此來提高工作效率和水平。隨著我國經(jīng)濟發(fā)展和手機無線網(wǎng)絡(luò)的普與,手機網(wǎng)絡(luò)技術(shù)已成為人們生活不可或缺的一部分聊天室隨著手機的日益普與,短信業(yè)務(wù)的一些缺點也日益顯現(xiàn):(1)不能實現(xiàn)一天短信發(fā)送到多個不同的手機號(部分手機群發(fā)功能只是將短信反復(fù)發(fā)送,實際需反復(fù)收費)。(2)短信長度受到限制。針對短信業(yè)務(wù)的不足,利用手機能夠方便的接入無線網(wǎng)絡(luò)的優(yōu)勢,手機聊天室應(yīng)運而生。他實現(xiàn)了多人之間較為便捷的交流。手機病毒 隨著智能手機的不斷普與,手機病毒成為了病毒發(fā)展的下一個目標(biāo)。手機病毒是一種破壞性程序,和計算機病毒(程序)一樣具有傳染性、破壞性。手機病毒可利用發(fā)送
6、短信、彩信,電子,瀏覽,下載鈴聲,藍牙等方式進行傳播。手機病毒可能會導(dǎo)致用戶手機死機、關(guān)機、資料被刪、向外發(fā)送垃圾、撥打等,甚至還會損毀 SIM卡、芯片等硬件。如今手機病毒,受到PC病毒的啟發(fā)與影響,也有所謂混合式攻擊的手法出現(xiàn)。網(wǎng)絡(luò)加密技術(shù)在常規(guī)密碼中,收信方和發(fā)信方使用一樣的密鑰,即加密密鑰和解密密鑰是一樣或等價的。比較著名的常規(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)點是有很強的強度,且經(jīng)受住時間的檢驗和攻擊,但其密鑰必須通過安全的途徑傳送。因此,其密鑰管理成為系統(tǒng)安全的重要因素。 在公鑰密碼中,收信方和發(fā)信方使用的密鑰互不一樣,而且?guī)缀醪豢赡軓募用苊荑€推導(dǎo)解密密鑰。比較著名的公鑰密碼算法有:RSA、背包密碼、McEliece密碼、Diffe?Hellman、Rabin、Ong?Fiat?Shamir、零知識證明的算法、橢圓曲線、EIGamal算法等等。最有影響的公鑰密碼算法是RSA,它能抵抗到目前為止已知的所有密碼攻擊。 公鑰密碼的優(yōu)點是可以適應(yīng)網(wǎng)絡(luò)的開放性要求,且密鑰管理問題也較為簡單,尤其可方便的實現(xiàn)數(shù)字簽名和驗
8、證。但其算法復(fù)雜,加密數(shù)據(jù)的速率較低。盡管如此,隨著現(xiàn)代電子技術(shù)和密碼技術(shù)的發(fā)展,公鑰密碼算法將是一種很有前途的網(wǎng)絡(luò)安全加密體制。 當(dāng)然在實際應(yīng)用中人們通常將常規(guī)密碼和公鑰密碼結(jié)合在一起使用,比如:利用DES或者IDEA來加密信息,而采用RSA來傳遞會話密鑰。如果按照每次加密所處理的比特來分類,可以將加密算法分為序列密碼和分組密碼。前者每次只加密一個比特而后者則先將信息序列分組,每次處理一個組。 密碼技術(shù)是網(wǎng)絡(luò)安全最有效的技術(shù)之一。一個加密網(wǎng)絡(luò),不但可以防止非授權(quán)用戶的搭線竊聽和入網(wǎng),而且也是對付惡意軟件的有效方法之一。 J2MEJava ME 以往稱作J2ME(Java Platform,M
9、icro Edition),是為機頂盒、移動和PDA之類嵌入式消費電子設(shè)備提供的Java語言平臺,包括虛擬機和一系列標(biāo)準(zhǔn)化的Java API。它和Java SE、Java EE一起構(gòu)成Java技術(shù)的三大版本,并且同樣是通過JCP(Java Community Process)制訂的。 根據(jù)Sun的定義:Java ME是一種高度優(yōu)化的Java運行環(huán)境,主要針對消費類電子設(shè)備的,例如蜂窩和可視、數(shù)字機頂盒、汽車導(dǎo)航系統(tǒng)等等。JAVA ME技術(shù)在1999年的JavaOne Developer Conference大會上正式推出,它將Java語言的與平臺無關(guān)的特性移植到小型電子設(shè)備上,允許移動無線設(shè)備
10、之間共享應(yīng)用程序。1.1.2 課題選擇出于上述各種背景考慮,我決定開發(fā)一個基于j2me技術(shù)的手機加密聊天室軟件。此聊天室雖然其功能簡單,但是在其設(shè)計與開發(fā)過程中,能夠充分學(xué)習(xí)和使用J2me以與DES加密算法技術(shù);實現(xiàn)群聊功能用到基于Cliet/Server的面向連接的 Socket編程技術(shù),并在程序中加入DES加密;1.2 課題技術(shù)簡介1.2.1 J2me簡介J2ME的全稱是Java2 Micro Edition (J2ME)Java2技術(shù)微型版,與J2SE、J2EE一樣都是有美國SUN微系統(tǒng)公司提出的JAVA技術(shù)規(guī)。 J2ME是為了能夠開發(fā)運行在小型設(shè)備、獨立設(shè)備、互聯(lián)移動設(shè)備、嵌入式設(shè)備上
11、的JAVA應(yīng)用程序而被提出的。J2ME是建立在一個由概要描述、配置、JAVA虛擬機和操作系統(tǒng)等部分組成的標(biāo)準(zhǔn)架構(gòu)之上的,這些容共同組成了完整的J2ME實時運行環(huán)境。它的技術(shù)核心是由一個JAVA虛擬機( JVM )與一套適合運行在上述設(shè)備環(huán)境上的API接口構(gòu)成。J2ME在1999年的JavaOne開發(fā)人員大會上初次亮相,它的目標(biāo)是面向智能無線設(shè)備和小型計算設(shè)備的開發(fā)人員,這些開發(fā)人員需要在他們的產(chǎn)品中整合跨平臺的能力。無線設(shè)備和小型計算設(shè)備的消費者期望這些設(shè)備能夠有較高的性能。他們希望小型計算設(shè)備有快速的響應(yīng)時間,與同種設(shè)備相兼容,擁有功能完備的應(yīng)用程序。消費者希望桌面計算機和筆記本電腦上的軟件
12、和功能同樣能夠運行在移動和個人數(shù)字助理上。為了滿足他們的需求,開發(fā)人員必須重新考慮他們設(shè)計計算機系統(tǒng)的方式。開發(fā)人員需要利用商業(yè)計算機上現(xiàn)有的前端和后端軟件的計算能力,并將這些能力傳遞到微型、移動和無線的計算設(shè)備上。J2ME能夠以最小的修改來實現(xiàn)這種傳遞,如果應(yīng)用程序的設(shè)計是可伸縮的,應(yīng)用程序就可以適應(yīng)小型計算設(shè)備上有限的資源。J2ME為在小型電子設(shè)備上創(chuàng)建性能卓越的網(wǎng)絡(luò)應(yīng)用提供了一套完整的解決方案,能很好的解決軟件跨平臺的兼容性和安全性的問題。52.2.1 J2ME架構(gòu)J2ME架構(gòu)的模塊化設(shè)計使應(yīng)用程序可以靈活適應(yīng)小型計算設(shè)備的限制。J2ME架構(gòu)沒有替代小型計算設(shè)備的操作系統(tǒng)。相反,J2ME
13、架構(gòu)由位于原生操作系統(tǒng)之上的多層軟件組成,這些軟件共同稱為“連接有限設(shè)備配置”(Connected Limited Device Configuration, CLDC)。安裝在操作系統(tǒng)之上的CLDC形成了小型計算設(shè)備的運行時環(huán)境。J2ME架構(gòu)由3個軟件層組成:第一層是包括在的配置層,這個層次直接與原生操作系統(tǒng)進行交互。配置層還處理profile和JVM之間的交互。第二層是profile層,由小型計算設(shè)備的應(yīng)用程序編程接口(API)的最小集合組成。第三層是Mobile Information Device Profile( MIDP )層。MIDP層由用戶網(wǎng)絡(luò)連接、永久存儲和用戶界面的java
14、 API組成。它還能夠訪問CLDC庫和MIDP庫。2.2.2 JVM ( 虛擬機 )JVM是專門為微型電子設(shè)備與資源受限設(shè)備如:手機、尋呼機、移動互聯(lián)網(wǎng)設(shè)備、家用微電子設(shè)備等設(shè)計的一種輕便、緊湊的JAVA虛擬機。JVM可以為微型電子設(shè)備提供一個完整的JAVA運行環(huán)境,除了一些微型設(shè)備所必需的適當(dāng)?shù)墓δ苡兴煌?,它是由JAVA虛擬機規(guī)定義的真實的JAVA虛擬機。它是專門為那些受資源限制,只有幾百K字節(jié)存的微型設(shè)備設(shè)計的。JVM起初是由SUN微系統(tǒng)實驗室為一個名叫“Spotless”的項目創(chuàng)建的。它的目標(biāo)是為資源受限制的Palm(是目前較為流行的掌上電腦操作系統(tǒng))可連接的電子設(shè)備,實現(xiàn)一個jav
15、a虛擬機?;谏鲜鲈?,JVM具有以下幾個特點:(1)小,僅具有40KB至80KB的靜態(tài)存。(2)輕便、精巧。(3)模塊化并可定制。(4)盡可能完全緊湊的完成設(shè)計目的。2.2.3 MIDP( 移動信息設(shè)備簡表 )MIDP是專門為互聯(lián)受限設(shè)備配置設(shè)計的,它為移動設(shè)備提供了一套API集合,MIDP包含用戶界面類、持久存儲功能與網(wǎng)絡(luò)功能。它同時也包括一個供用戶下載新應(yīng)用到終端設(shè)備的標(biāo)準(zhǔn)運行環(huán)境。運行在MIDP下的小應(yīng)用程序叫做MIDlet移動設(shè)備小應(yīng)用程序,它與Applet類似。MIDP要求平臺設(shè)備提供一個機制用來存儲簡單的數(shù)據(jù)記錄,通過正常的平臺事件,比如重新啟動和電池更新維護系統(tǒng)的完整性。MID
16、P是以SUN、Motorola、Nokia為中心的MIDPEG組織(Mobile Information Profile Expert Group)所制訂出來使用在CLDC上的Profile,是以能使用在移動、雙向?qū)χv機、可無線通信的PDA(個人數(shù)字助理)上面為前提設(shè)計出來的。另外,像日本國的NTT DoCoMo、J-PHONE、KDDI等電信商與移動制造商也都曾參與了MIDPEG。MIDP是在CLDC的功能上附加提供適合目標(biāo)設(shè)備用的GUI與事件處理功能。這樣一來,就可以當(dāng)成MIDP應(yīng)用程序(MIDlet)來運行了。MIDP由于是由多個企業(yè)所共同策劃出來的開放標(biāo)準(zhǔn),因此主要的移動制造商也會制造
17、出大量的對應(yīng)機種。也就是說,以MIDP為基準(zhǔn)所制作出來的應(yīng)用程序,也將可以在流通于市面上的移動上執(zhí)行。另外,MIDP不僅限于移動,也已經(jīng)被移植到PDA Palm OS上,而以MIDP for Palm OS的名字來稱呼(與KJava是不同的)。在不使用各電信商的擴展API的時候,制作給移動用的MIDlet也將可以使用在Palm OS上面。由于未來MIDP也將會搭載到不同設(shè)備之上,也由于其兼容性高,只要寫過一次程序,就可以在其他移動或是移動以外的設(shè)備上執(zhí)行;而這也就是它最大的好處。2 軟件需求分析、模塊設(shè)計和實現(xiàn)原理1.5 DES加密算法 1DES算法原理DES算法是一種分組加密算法,他以64位
18、的分組數(shù)據(jù)進行加解密,數(shù)據(jù)加密和解密使用一樣的算法結(jié)構(gòu),只是密鑰的使用順序不同。蜜鑰通常為64位,但每個第8位都用作奇偶校驗,實際密鑰長度為56位。DES算法的性取決于密鑰,但只有極少數(shù)的密鑰被認(rèn)為是弱密鑰,所以在實際的應(yīng)用中可以很容易避免。圖1為DES算法的流程圖。DES算法的基本流程如下:首先,輸入明文通過初始置換,將其分成左、右各為32位的兩個部分,然后進行16輪完全一樣的運算。經(jīng)過16輪運算后,左、右半部分合并在一起經(jīng)過一個末置換(初始置換的逆置換),于是整個算法結(jié)束。在每一輪運算中,密鑰位移位,然后再從密鑰的56位中選取48位。通過一個擴展置換,將數(shù)據(jù)的右半部分?jǐn)U展為48位,并通過一
19、個異或操作與一個48位密鑰結(jié)合,通過8個S盒將這48位替代成新的32位數(shù)據(jù),再通過一級置換操作。這四步操作即為圖1中的函數(shù)f。圖2給出了函數(shù)f的計算流程圖。假設(shè)Bi是第i次迭代的結(jié)果,Li和Ri為Bi的左半部分和右半部分,Ki是第i輪的48位密鑰,那么每一輪就是: 2具體硬件實現(xiàn)DES算法的硬件實現(xiàn)以圖1為基礎(chǔ),其中的初始置換和末置換的實現(xiàn)比較簡單,具體可參考文獻1。硬件實現(xiàn)的關(guān)鍵在于如何實現(xiàn)函數(shù)f和每一輪迭代中密鑰。本文重點研究了DES算法中函數(shù)f的實現(xiàn)方法,并給出了 實際代碼。函數(shù)f的實現(xiàn)參照圖2,首先將數(shù)據(jù)的右半部分?jǐn)U展為48位數(shù)據(jù),該操作的目的是產(chǎn)生與密鑰同長度的數(shù)據(jù)以進行異或操作。異
20、或操作的結(jié)果(48位)進行S盒替代,將數(shù)據(jù)壓縮為32位。每個S盒都有6位的輸入,4位的輸出,48位的輸入被分為8個6位的分組,每一個分組對應(yīng)一個S盒替代操作。每個S盒是一個4行、16列的表,輸入位以一種特殊的方式確定S盒中的項。假定將S盒的6位輸入標(biāo)記為x0,x1,x2,x3,x4,x5。則x0和x5組合成2位的數(shù),從03,對應(yīng)表中的一行,x2x5構(gòu)成一個4位的數(shù),從015,對應(yīng)表中的一列。限于篇幅,本文僅給出S1盒的置換,具體如表1所示。1.2.4 SocketSocket通常也稱作"套接字",用于描述IP地址和端口,是一個通信鏈的句柄。應(yīng)用程序通常通過"套接字
21、"向網(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è)計者最先是將接口放在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ù)炔僮鞫际峭ㄟ^
22、該Socket實現(xiàn)的。下面是一個經(jīng)典的基于TCP/IP面向連接的Socket網(wǎng)絡(luò)編程流程圖:圖1 面向?qū)ο蟮腟ocket編程聊天室就是采用上述面向連接的Socket編程技術(shù)實現(xiàn)的,從JoyuChat1.0版本就可以清晰地看出圖1所示的流程,所有后續(xù)版本都只是增加一些實用的功能,而這所有功能的實現(xiàn)都是基于圖1所示的模式實現(xiàn)的。2.1 加密聊天室軟件需求分析1.通過socket實現(xiàn)手機間的通信。 2.通過DES加密程序在聊天室相互通信時實現(xiàn)時時加密,防止信息外泄。2.2 魚魚聊天室軟件功能模塊設(shè)計 一、手機端與服務(wù)器端的Socket通訊我們通常需要在手機中實現(xiàn)某些功能,而這些功能需要服務(wù)器提供服務(wù)
23、,因而在手機中需要建立與服務(wù)器之間的有效通信。在服務(wù)器端我們使用的是ServerSocket來創(chuàng)建服務(wù)socket,代碼如:ServerSocket server = new ServerSocket(4321);,這樣就打開了一個ServerSocket,然后我們使用ServerSocket的accept方法來監(jiān)聽客戶端建立的連接,該方法在沒有客戶端建立請求的時候會一直處于阻塞狀態(tài),直到有連接建立則形成Socket對象,服務(wù)器通常需要為多客戶端同時提供服務(wù),因此一般情況下,我們通過在一個循環(huán)中不斷監(jiān)聽客戶端連接,并為每一個連接創(chuàng)建一個線程提供獨立服務(wù)。 1. ServerSocke
24、t server = new ServerSocket(4321); 2. while(true) 3. socket = server.accept(); 4. new ServerThread(socket).start(); 5. 然后在線程中打開socket的通信數(shù)據(jù)流與客戶端進行通訊。
25、; 在JavaME中,與JavaSE的socket使用方式有些不同,在打開Socket連接的時候,使用的不是Socket,而是SocketConnection,并由JavaME中的網(wǎng)絡(luò)連接類Connector的open方法來建立socket連接,同時,由于open方法返回的是Connection對象,因此需要將其轉(zhuǎn)化為SocketConnection對象。 1. SocketConnection sc = (SocketConnection) Connector.open("socket:/127.0.0.1:4321");
26、; 這樣就打開了一個socket連接對象,然后通過獲取該socket的通信流就可以跟服務(wù)器之間進行數(shù)據(jù)交換。 二、手機端與手機端之間的Socket通訊有些開發(fā)應(yīng)用中,實現(xiàn)了手機與手機之間直接的通訊,這就需要讓一個手機作為服務(wù)端,而另一手機作為客戶端來處理,作為客戶端的Socket使用方法與以上(一)中一樣,不同的主要是作為服務(wù)端的手機程序?qū)崿F(xiàn)。同樣的,在JavaME中并不是通過ServerSocket來創(chuàng)建服務(wù)Socket的,而是通過ServerSocketConnection來實現(xiàn),并且一樣是通過Connector來打開
27、連接,使用的方法是acceptAndOpen,具體實現(xiàn)如下: 1. ServerSocketConnection ssc = (ServerSocketConnection)Connector.open("socket:/:1234"); 2. SocketConnection sc = (SocketConnection)ssc.acceptAndOpen(); 在得到SocketConnection對象之后便
28、可以通過獲取相應(yīng)的socket數(shù)據(jù)流進行通信。 1. DataInputStream dis = sc.openDataOutputStream(); 2. DataOutputStream dos = sc.openDataInputStream(); 以上為分別對手機與服務(wù)器端之間、手機與手機之間通過Socket進行通訊的基本方法。 作。3 魚魚聊天室軟件實現(xiàn)過程3.1 開發(fā)環(huán)境與開發(fā)工具的選擇3.1.1 開發(fā)環(huán)境3.1.2 M
29、yEclipse集成開發(fā)工具目前用于開發(fā)的工具有很多,如MyEclipse,NetBeans,Borland uilder等。這些開發(fā)工具很多且各有優(yōu)缺點,由于我們要建j2me項目,于是我們優(yōu)先選擇MyEclipse作為我們的開發(fā)工具。MyEclipse的可視化集成開發(fā)環(huán)境包括文本編輯器、工程創(chuàng)建工具、對象瀏覽器和調(diào)試器等。還能把MySQL數(shù)據(jù)庫,Tomcat服務(wù)器和JDK整合在一起,并且用戶可以在集成開發(fā)環(huán)境中創(chuàng)建工程和打開工程,建立、打開和編輯文件,并可以編譯、運行和調(diào)試應(yīng)用程序,極大限度地方便了魚魚聊天室快速高效地開發(fā)和調(diào)試。3.2 魚魚聊天室軟件實現(xiàn)過程說明35 Socket技術(shù)的代碼
30、實現(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("請輸入:","",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("請輸入新密鑰:","",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("密碼不正確 無法接收信息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實現(xiàn)手機間的通信。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("請輸入:","",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;請輸入新密鑰:","",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. 本站所有資源如無特殊說明,都需要本地電腦安裝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)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年綜合接入服務(wù)系統(tǒng)項目可行性研究報告
- 2025年電腦雕刻圣誕燈飾項目可行性研究報告
- 2025至2031年中國牛角扣羊羔絨馬甲行業(yè)投資前景及策略咨詢研究報告
- 2025年果蔬寶農(nóng)藥項目可行性研究報告
- 2025至2031年中國異型結(jié)構(gòu)件行業(yè)投資前景及策略咨詢研究報告
- 2025年工藝溫度計項目可行性研究報告
- 延安2024年陜西延安市市直事業(yè)單位選聘70人筆試歷年參考題庫附帶答案詳解
- 2025至2031年中國一體式頂置空調(diào)器行業(yè)投資前景及策略咨詢研究報告
- 2025至2030年中國黑豆粉數(shù)據(jù)監(jiān)測研究報告
- 2025至2030年高效板式密閉過濾機項目投資價值分析報告
- 水土保持方案中沉沙池的布設(shè)技術(shù)
- 安全生產(chǎn)技術(shù)規(guī)范 第25部分:城鎮(zhèn)天然氣經(jīng)營企業(yè)DB50-T 867.25-2021
- 現(xiàn)代企業(yè)管理 (全套完整課件)
- 走進本土項目化設(shè)計-讀《PBL項目化學(xué)習(xí)設(shè)計》有感
- 《網(wǎng)店運營與管理》整本書電子教案全套教學(xué)教案
- 教師信息技術(shù)能力提升培訓(xùn)課件希沃的課件
- 高端公寓住宅項目營銷策劃方案(項目定位 發(fā)展建議)
- 執(zhí)業(yè)獸醫(yī)師聘用協(xié)議(合同)書
- 第1本書出體旅程journeys out of the body精教版2003版
- [英語考試]同等學(xué)力英語新大綱全部詞匯
- 2022年肝動脈化療栓塞術(shù)(TACE)
評論
0/150
提交評論