




已阅读5页,还剩23页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
北 京 工 业 大 学毕业论文 题 目 基于J2ME的聊天室加密系统 摘 要 本文阐述了如何使用J2ME的Socket编程技术编写一个手机的通信类聊天软件并集成DES加密程序进行时时加密,着重讨论了从设计到实现软件的具体过程及如何利用J2ME,socket,DES等技术实现程序代码。 聊天室系统具有安全及流畅的网络通信效果。软件运行速度快、安全性好,也很稳定。关键词:聊天室 J2ME Socket DES目 录1 前言11.1 课题来源11.1.1 课题背景11.1.2 课题选择11.2 课题技术简介21.2.1 J2me简介21.2.2 JVM(虚拟机)31.2.3 MIDP(移动信息设备简表)41.2.4 Socket41.2.5 Swing51.2.6 MySQL51.2.7 JDBC61.2.8 B/S结构71.2.9 JSP72 软件需求分析、模块设计和实现原理82.1 鱼鱼聊天室软件需求分析82.2 鱼鱼聊天室软件功能模块设计82.2.1 Web服务器程序(B/S)82.2.2 桌面程序服务器端(C/S的Server服务器端)92.2.3 桌面程序客户端(C/S的Client客户端)92.3 鱼鱼聊天室软件用例图92.4 软件实现原理与具体流程103 鱼鱼聊天室软件实现过程143.1 开发环境与开发工具的选择143.1.1 开发环境143.1.2 MyEclipse集成开发工具143.1.3 Dreamweaver8网页界面开发工具143.2 鱼鱼聊天室软件实现过程说明143.3 软件开发进度实录153.4 鱼鱼聊天室V2.6.1文件结构203.4.1 客户端程序结构(JoyuQQClient)203.4.2 服务器端程序结构(SayuQQServer)223.4.3 Web服务器端程序结构(JoyuQQWebService)233.4.4 服务器端(JoyuQQWebService和SayuQQServer)用到的数据库结构2335 Socket技术的代码实现鱼鱼聊天室V1.0243.5.1 鱼鱼聊天室V1.0中的客户端代码243.5.2 鱼鱼聊天室V1.0中的服务器端代码283.5.3 小结334 鱼鱼聊天室的部署与运行334.1 部署334.1.1 本地部署334.1.2 一般部署344.2 运行365 结语36参 考 文 献37The Implementation and Development of JoyuQQ38附录A:附带光盘内容39附录B:鱼鱼聊天室运行效果部分贴图42致 谢51仲恺农业工程学院毕业论文(设计)成绩评定表521 前言1.1 课题来源1.1.1 课题背景手机网络技术众所周知手机无线网络技术是手机领域中发展最为迅速的技术之一,它在政治、经济、生活等各个方面发挥着十分重要的作用。随着手机无线网络的普及和推广,将会有越来越多的人利用手机网上资源,享受不断发展和完善的手机网络服务,以此来提高工作效率和水平。随着我国经济发展和手机无线网络的普及,手机网络技术已成为人们生活不可或缺的一部分聊天室随着手机的日益普及,短信业务的一些缺点也日益显现:(1)不能实现一天短信发送到多个不同的手机号(部分手机群发功能只是将短信反复发送,实际需反复收费)。(2)短信长度受到限制。针对短信业务的不足,利用手机能够方便的接入无线网络的优势,手机聊天室应运而生。他实现了多人之间较为便捷的交流。手机病毒 随着智能手机的不断普及,手机病毒成为了病毒发展的下一个目标。手机病毒是一种破坏性程序,和计算机病毒(程序)一样具有传染性、破坏性。手机病毒可利用发送短信、彩信,电子邮件,浏览网站,下载铃声,蓝牙等方式进行传播。手机病毒可能会导致用户手机死机、关机、资料被删、向外发送垃圾邮件、拨打电话等,甚至还会损毁 SIM卡、芯片等硬件。如今手机病毒,受到PC病毒的启发与影响,也有所谓混合式攻击的手法出现。网络加密技术在常规密码中,收信方和发信方使用相同的密钥,即加密密钥和解密密钥是相同或等价的。比较著名的常规密码算法有:美国的DES及其各种变形,比如Triple DES、GDES、New DES和DES的前身Lucifer;欧洲的IDEA;日本的FEAL?N、LOKI?91、Skipjack、RC4、RC5以及以代换密码和转轮密码为代表的古典密码等。在众多的常规密码中影响最大的是DES密码。 常规密码的优点是有很强的保密强度,且经受住时间的检验和攻击,但其密钥必须通过安全的途径传送。因此,其密钥管理成为系统安全的重要因素。 在公钥密码中,收信方和发信方使用的密钥互不相同,而且几乎不可能从加密密钥推导解密密钥。比较著名的公钥密码算法有:RSA、背包密码、McEliece密码、Diffe?Hellman、Rabin、Ong?Fiat?Shamir、零知识证明的算法、椭圆曲线、EIGamal算法等等。最有影响的公钥密码算法是RSA,它能抵抗到目前为止已知的所有密码攻击。 公钥密码的优点是可以适应网络的开放性要求,且密钥管理问题也较为简单,尤其可方便的实现数字签名和验证。但其算法复杂,加密数据的速率较低。尽管如此,随着现代电子技术和密码技术的发展,公钥密码算法将是一种很有前途的网络安全加密体制。 当然在实际应用中人们通常将常规密码和公钥密码结合在一起使用,比如:利用DES或者IDEA来加密信息,而采用RSA来传递会话密钥。如果按照每次加密所处理的比特来分类,可以将加密算法分为序列密码和分组密码。前者每次只加密一个比特而后者则先将信息序列分组,每次处理一个组。 密码技术是网络安全最有效的技术之一。一个加密网络,不但可以防止非授权用户的搭线窃听和入网,而且也是对付恶意软件的有效方法之一。 J2ME Java ME 以往称作J2ME(Java Platform,Micro Edition),是为机顶盒、移动电话和PDA之类嵌入式消费电子设备提供的Java语言平台,包括虚拟机和一系列标准化的Java API。它和Java SE、Java EE一起构成Java技术的三大版本,并且同样是通过JCP(Java Community Process)制订的。 根据Sun的定义:Java ME是一种高度优化的Java运行环境,主要针对消费类电子设备的,例如蜂窝电话和可视电话、数字机顶盒、汽车导航系统等等。JAVA ME技术在1999年的JavaOne Developer Conference大会上正式推出,它将Java语言的与平台无关的特性移植到小型电子设备上,允许移动无线设备之间共享应用程序。1.1.2 课题选择出于上述各种背景考虑,我决定开发一个基于j2me技术的手机加密聊天室软件。此聊天室虽然其功能简单,但是在其设计与开发过程中,能够充分学习和使用J2me以及DES加密算法技术;实现群聊功能用到基于Cliet/Server的面向连接的 Socket编程技术,并在程序中加入DES加密;1.2 课题技术简介 1.2.1 J2me简介J2ME的全称是Java2 Micro Edition (J2ME)Java2技术微型版,与J2SE、J2EE一样都是有美国SUN微系统公司提出的JAVA技术规范。 J2ME是为了能够开发运行在小型设备、独立设备、互联移动设备、嵌入式设备上的JAVA应用程序而被提出的。J2ME是建立在一个由概要描述、配置、JAVA虚拟机和操作系统等部分组成的标准架构之上的,这些内容共同组成了完整的J2ME实时运行环境。它的技术核心是由一个JAVA虚拟机( JVM )及一套适合运行在上述设备环境上的API接口构成。J2ME在1999年的JavaOne开发人员大会上初次亮相,它的目标是面向智能无线设备和小型计算设备的开发人员,这些开发人员需要在他们的产品中整合跨平台的能力。无线设备和小型计算设备的消费者期望这些设备能够有较高的性能。他们希望小型计算设备有快速的响应时间,与同种设备相兼容,拥有功能完备的应用程序。消费者希望桌面计算机和笔记本电脑上的软件和功能同样能够运行在移动电话和个人数字助理上。为了满足他们的需求,开发人员必须重新考虑他们设计计算机系统的方式。开发人员需要利用商业计算机上现有的前端和后端软件的计算能力,并将这些能力传递到微型、移动和无线的计算设备上。J2ME能够以最小的修改来实现这种传递,如果应用程序的设计是可伸缩的,应用程序就可以适应小型计算设备上有限的资源。J2ME为在小型电子设备上创建性能卓越的网络应用提供了一套完整的解决方案,能很好的解决软件跨平台的兼容性和安全性的问题。52.2.1 J2ME架构J2ME架构的模块化设计使应用程序可以灵活适应小型计算设备的限制。J2ME架构没有替代小型计算设备的操作系统。相反,J2ME架构由位于原生操作系统之上的多层软件组成,这些软件共同称为“连接有限设备配置”(Connected Limited Device Configuration, CLDC)。安装在操作系统之上的CLDC形成了小型计算设备的运行时环境。J2ME架构由3个软件层组成:第一层是包括在内的配置层,这个层次直接与原生操作系统进行交互。配置层还处理profile和JVM之间的交互。第二层是profile层,由小型计算设备的应用程序编程接口(API)的最小集合组成。第三层是Mobile Information Device Profile( MIDP )层。MIDP层由用户网络连接、永久存储和用户界面的java API组成。它还能够访问CLDC库和MIDP库。2.2.2 JVM ( 虚拟机 )JVM是专门为微型电子设备与资源受限设备如:手机、寻呼机、移动互联网设备、家用微电子设备等设计的一种轻便、紧凑的JAVA虚拟机。JVM可以为微型电子设备提供一个完整的JAVA运行环境,除了一些微型设备所必需的适当的功能有所不同外,它是由JAVA虚拟机规范定义的真实的JAVA虚拟机。它是专门为那些受资源限制,只有几百K字节内存的微型设备设计的。JVM起初是由SUN微系统实验室为一个名叫“Spotless”的项目创建的。它的目标是为资源受限制的Palm(是目前较为流行的掌上电脑操作系统)可连接的电子设备,实现一个java虚拟机。基于上述原因,JVM具有以下几个特点:(1)小,仅具有40KB至80KB的静态内存。(2)轻便、精巧。(3)模块化并可定制。(4)尽可能完全紧凑的完成设计目的。2.2.3 MIDP( 移动信息设备简表 )MIDP是专门为互联受限设备配置设计的,它为移动设备提供了一套API集合,MIDP包含用户界面类、持久存储功能与网络功能。它同时也包括一个供用户下载新应用到终端设备的标准运行环境。运行在MIDP下的小应用程序叫做MIDlet移动设备小应用程序,它与Applet类似。MIDP要求平台设备提供一个机制用来存储简单的数据记录,通过正常的平台事件,比如重新启动和电池更新维护系统的完整性。MIDP是以SUN、Motorola、Nokia为中心的MIDPEG组织(Mobile Information Profile Expert Group)所制订出来使用在CLDC上的Profile,是以能使用在移动电话、双向对讲机、可无线通信的PDA(个人数字助理)上面为前提设计出来的。另外,像日本国内的NTT DoCoMo、J-PHONE、KDDI等电信商与移动电话制造商也都曾参与了MIDPEG。MIDP是在CLDC的功能上附加提供适合目标设备用的GUI与事件处理功能。这样一来,就可以当成MIDP应用程序(MIDlet)来运行了。MIDP由于是由多个企业所共同策划出来的开放标准,因此主要的移动电话制造商也会制造出大量的对应机种。也就是说,以MIDP为基准所制作出来的应用程序,也将可以在流通于市面上的移动电话上执行。另外,MIDP不仅限于移动电话,也已经被移植到PDA Palm OS上,而以MIDP for Palm OS的名字来称呼(与KJava是不同的)。在不使用各电信商的扩展API的时候,制作给移动电话用的MIDlet也将可以使用在Palm OS上面。由于未来MIDP也将会搭载到不同设备之上,也由于其兼容性高,只要写过一次程序,就可以在其他移动电话或是移动电话以外的设备上执行;而这也就是它最大的好处。2 软件需求分析、模块设计和实现原理1.5 DES加密算法 1DES算法原理DES算法是一种分组加密算法,他以64位的分组数据进行加解密,数据加密和解密使用相同的算法结构,只是密钥的使用顺序不同。蜜钥通常为64位,但每个第8位都用作奇偶校验,实际密钥长度为56位。DES算法的保密性取决于密钥,但只有极少数的密钥被认为是弱密钥,所以在实际的应用中可以很容易避免。图1为DES算法的流程图。DES算法的基本流程如下:首先,输入明文通过初始置换,将其分成左、右各为32位的两个部分,然后进行16轮完全相同的运算。经过16轮运算后,左、右半部分合并在一起经过一个末置换(初始置换的逆置换),于是整个算法结束。在每一轮运算中,密钥位移位,然后再从密钥的56位中选取48位。通过一个扩展置换,将数据的右半部分扩展为48位,并通过一个异或操作与一个48位密钥结合,通过8个S盒将这48位替代成新的32位数据,再通过一级置换操作。这四步操作即为图1中的函数f。图2给出了函数f的计算流程图。假设Bi是第i次迭代的结果,Li和Ri为Bi的左半部分和右半部分,Ki是第i轮的48位密钥,那么每一轮就是: 2具体硬件实现DES算法的硬件实现以图1为基础,其中的初始置换和末置换的实现比较简单,具体可参考文献1。硬件实现的关键在于如何实现函数f和每一轮迭代中密钥。本文重点研究了DES算法中函数f的实现方法,并给出了 实际代码。函数f的实现参照图2,首先将数据的右半部分扩展为48位数据,该操作的目的是产生与密钥同长度的数据以进行异或操作。异或操作的结果(48位)进行S盒替代,将数据压缩为32位。每个S盒都有6位的输入,4位的输出,48位的输入被分为8个6位的分组,每一个分组对应一个S盒替代操作。每个S盒是一个4行、16列的表,输入位以一种特殊的方式确定S盒中的项。假定将S盒的6位输入标记为x0,x1,x2,x3,x4,x5。则x0和x5组合成2位的数,从03,对应表中的一行,x2x5构成一个4位的数,从015,对应表中的一列。限于篇幅,本文仅给出S1盒的置换,具体如表1所示。1.2.4 Socket Socket通常也称作套接字,用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过套接字向网络发出请求或者应答网络请求。Socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序。要学Internet上的TCP/IP网络编程,必须理解Socket接口。 Socket接口设计者最先是将接口放在Unix操作系统里面的。如果了解Unix系统的输入和输出的话,就很容易了解Socket了。网络的Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符。Socket也具有一个类似于打开文件的函数调用Socket(),该函数返回一个整型的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现的。下面是一个经典的基于TCP/IP面向连接的Socket网络编程流程图:图1 面向对象的Socket编程聊天室就是采用上述面向连接的Socket编程技术实现的,从JoyuChat1.0版本就可以清晰地看出图1所示的流程,所有后续版本都只是增加一些实用的功能,而这所有功能的实现都是基于图1所示的模式实现的。2.1 加密聊天室软件需求分析1.通过socket实现手机间的通信。 2.通过DES加密程序在聊天室相互通信时实现时时加密,防止信息外泄。2.2 鱼鱼聊天室软件功能模块设计 一、手机端与服务器端的Socket通讯我们通常需要在手机中实现某些功能,而这些功能需要服务器提供服务,因而在手机中需要建立与服务器之间的有效通信。在服务器端我们使用的是ServerSocket来创建服务socket,代码如:ServerSocket server = new ServerSocket(4321);,这样就打开了一个ServerSocket,然后我们使用ServerSocket的accept方法来监听客户端建立的连接,该方法在没有客户端建立请求的时候会一直处于阻塞状态,直到有连接建立则形成Socket对象,服务器通常需要为多客户端同时提供服务,因此一般情况下,我们通过在一个循环中不断监听客户端连接,并为每一个连接创建一个线程提供独立服务。1. ServerSocketserver=newServerSocket(4321); 2. while(true) 3. socket=server.accept(); 4. newServerThread(socket).start(); 5. 然后在线程中打开socket的通信数据流与客户端进行通讯。 在JavaME中,与JavaSE的socket使用方式有些不同,在打开Socket连接的时候,使用的不是Socket,而是SocketConnection,并由JavaME中的网络连接类Connector的open方法来建立socket连接,同时,由于open方法返回的是Connection对象,因此需要将其转化为SocketConnection对象。 1. SocketConnectionsc=(SocketConnection)Connector.open(socket:/:4321); 这样就打开了一个socket连接对象,然后通过获取该socket的通信流就可以跟服务器之间进行数据交换。 二、手机端与手机端之间的Socket通讯有些开发应用中,实现了手机与手机之间直接的通讯,这就需要让一个手机作为服务端,而另一手机作为客户端来处理,作为客户端的Socket使用方法与以上(一)中相同,不同的主要是作为服务端的手机程序实现。同样的,在JavaME中并不是通过ServerSocket来创建服务Socket的,而是通过ServerSocketConnection来实现,并且一样是通过Connector来打开连接,使用的方法是acceptAndOpen,具体实现如下: 1. ServerSocketConnectionssc=(ServerSocketConnection)Connector.open(socket:/:1234); 2. SocketConnectionsc=(SocketConnection)ssc.acceptAndOpen(); 在得到SocketConnection对象之后便可以通过获取相应的socket数据流进行通信。1. DataInputStreamdis=sc.openDataOutputStream(); 2. DataOutputStreamdos=sc.openDataInputStream(); 以上为分别对手机与服务器端之间、手机与手机之间通过Socket进行通讯的基本方法。 作。3 鱼鱼聊天室软件实现过程3.1 开发环境与开发工具的选择3.1.1 开发环境3.1.2 MyEclipse集成开发工具目前用于开发的工具有很多,如MyEclipse,NetBeans,Borland JBuilder等。这些开发工具很多且各有优缺点,由于我们要建j2me项目,于是我们优先选择MyEclipse作为我们的开发工具。MyEclipse的可视化集成开发环境包括文本编辑器、工程创建工具、对象浏览器和调试器等。还能把MySQL数据库,Tomcat服务器和JDK整合在一起,并且用户可以在集成开发环境中创建工程和打开工程,建立、打开和编辑文件,并可以编译、运行和调试应用程序,极大限度地方便了鱼鱼聊天室快速高效地开发和调试。3.2 鱼鱼聊天室软件实现过程说明35 Socket技术的代码实现聊天室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.Command;import javax.microedition.lcdui.CommandListener;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.*;import javax.microedition.media.control.*;public class server extends MIDlet implements CommandListener private Display display; private Form form = new Form(服务器聊天); private Command cmd = new Command(发送,Command.SCREEN,-1); private Command cmd1 = new Command(设置密钥,Command.SCREEN,1); private TextField tf_msg = new TextField(请输入:,50,TextField.ANY);private Form form1 = new Form(设置);private 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(请输入新密钥:,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 dos1 = 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.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(); 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.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.getString();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(); String 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 = new byte4096; for (int n; (n = in.read(b) != -1;) out.append(new String(b, 0, n); return out.toString(); 3.5.3 小结 聊天室首先依靠socket实现手机间的通信。4 聊天室的通信加密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.Command;import javax.microedition.lcdui.CommandListener;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.*;import javax.microedition.media.control.*;public class server extends MIDlet implements CommandListener private Display display; private Form form = new Form(服务器聊天); private Command cmd = new Command(发送,Command.SCREEN,-1); private Command cmd1 = new Command(设置密钥,Command.SCREEN,1); private TextField tf_msg = new TextField(请输入:,50,TextField.ANY);private Form form1 = new Form(设置);private 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(请输入新密钥:,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 dos1 = 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.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(); 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.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.getString();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(); String 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()
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 餐饮服务:变革与创新-消费者需求驱动下的行业挑战与应对
- 2025江苏泰州市卫生健康委员会所属部分事业单位招聘专业技术人员9人模拟试卷及答案详解(易错题)
- 2025福建漳州市南靖县南坑镇民政服务站招聘社工1人模拟试卷完整参考答案详解
- 智能招聘与人才匹配研究-洞察及研究
- 磁性材料应用探索-洞察及研究
- 初二物理质量教学教案设计
- 小学语文拼音短期复习计划与措施
- 2025湖北交投实业发展有限公司服务区管理员遴选人员考前自测高频考点模拟试题附答案详解(考试直接用)
- 单片机技术文献翻译实践与技巧
- 家庭教育经验分享与改进措施
- JG/T 455-2014建筑门窗幕墙用钢化玻璃
- T/CNFAGS 3-2021三聚氰胺单位产品消耗限额
- 一例胃癌患者的疑难病例讨论
- 管道试压安全培训课件
- 2025白山市辅警考试试卷真题
- 鲜食玉米车间管理制度
- 2025年中国银鳕鱼段行业市场发展前景及发展趋势与投资战略研究报告
- 贵州省赫章县野马川镇初级中学-红色精神张桂梅【课件】
- 创业项目的商业模式画布
- 河南省安阳市内黄县2024-2025学年七年级上学期期末语文试题(解析版)
- 水上乐园工程行业深度调研及发展战略咨询报告
评论
0/150
提交评论