基于J2ME的手机通信功能的开发_第1页
基于J2ME的手机通信功能的开发_第2页
基于J2ME的手机通信功能的开发_第3页
基于J2ME的手机通信功能的开发_第4页
基于J2ME的手机通信功能的开发_第5页
已阅读5页,还剩68页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

I摘要摘要的模拟器上模拟手机发送和接收文本信息及手机与PC机、手机与手机的网络通AbstractAbstractThepresenteraistheinformationage,isalsoaneraofcellphones,modernlife'sdependenceonthephonequiteserious.J2MEinrecentyearsavarietyofmobilecommunicationsequipmentwiththedevelopmentofthebirthofanewtechnology,Its"writeonce,runanywhere"natureofJavatoincreasetheefficiencyofdevelopment.Withthepopularityofmobilephones,theInternettoupdateanddevelopthegrowing,Javafunctionintherealizationofmobiledevices,Moreandmoreapplicationsbasedonmobileplatformisintherapiddevelopmentandplaysaroleinrichcontentofpeople'slives,thatSendandreceivetextmessagesisthetraditionalcommunicationfunctionsofmobilephonesandisalsoanindispensablefeatureofacommunicationtodailylife,TheuseofwirelessinterfacefunctionWMAdesignedtoachievethisfunction;Atthesametime,theupdatefortheInternetand3Gnetworks,putforwardacellphonenetwork--real-timechatsystemdevelopmentandcomplement,inthedesignandimplementationofthisfeatureusingtheSocketbasedtransportprotocolTCP,anduseofthenetworkcommunicationfunctionMIDP.ThispaperfocusesontheapplicationofJ2MEtechnology,havealsochosenbasedontheTCP/IPnetworkprotocolprogramming.PaperintroducestheEclipseintegrateddevelopmentenvironment,J2MEarchitecture,configuration,profileandotherbasicnormsofknowledge;Secondly,ananalysisoftherealizationofmobilecommunicationtechnologyandtherelevantbasictheory,thatis,thewirelessinterfacefunctionWMA,MIDPnetworkcommunicationfunction,etc.;Finally,theuseofJAVAprogramminglanguageandsimulatorSUNprovidedontheanalogphonestosendandreceivetextmessagesandmobilephonewithPC,mobilephoneacommunicationfunctions.Keywords:J2ME;MIDP;WMA;sendandreceivetextmessages;Socket;networkcommunication江苏大学本科毕业论文 第二章开发环境与开发技术 2.2关于Eclipse及WirelessToolKit 2.3MIDP 第三章Java2MicroEdition概述 第四章手机文本信息的发送和接收 4.3PUSH注册 4.5程序打包及运行效果 第五章手机的网络通信 5.3.1应用程序的设计 5.4手机与手机之间的网络通信 5.4.1应用程序的设计 第六章总结与展望 1江苏大学本科毕业论文第一章绪论本次设计的目的是掌握基于TCP/IP协议的编程)与流行开发工具J2ME,并通过设计实现智能手机发送和接收文2江苏大学本科毕业论文本论文通过对TCP/IP协议的网络编程技术的掌握,主要研究在J2ME的Eclipse集成开发环境下,如何利用现有的开发技术进行windo机与手机之间的网络通行功能。本论文研究与实现的手机通信功能结合了J2ME开发技术和TCP/IP协议网络3江苏大学本科毕业论文第二章开发环境与开发技术Sun-java-WirelessToolKi4江苏大学本科毕业论文J2ME应用程序非常方便。在实际开发时,也有可能针对某个具体设备开发应用程序。各个设备制造厂商都为自己的设备提供了开发环境和模拟器,如Moto,附加提供了一些专有API,提供了模拟真实设备的模拟器。例如Nokia提供的5江苏大学本科毕业论文级的块(MID)描述了设备的硬件。在硬件之上统和设备所使用的类库。再上一级,从左到右是上一层的软件CLDC。这一块描述了虚拟机和由CLDC规范所定义的相关类库,它提供了更高级别的JavaAPIMIDPMIDMIDP6江苏大学本科毕业论文有自己的状态,并且他的状态变化由设备上的程序管理软件AMS(Application备上删除等等,并在此过程中负责错误处理和与用户交互,为程序提供了Java暂()图2.4MIDlet状态和状态转换图MIDlet类实现了与AMS交互的大部分功能,只把状态转换时需要调用的startApp(、)pauseApp(、)destroyApp()个3方法留给开发者实现。JAR内容的清单文件(manifest.mf)。这个程序包就是MIDlet应用程序套件MIDlets(MIDletSui)清单文件包括一系列的MIDlet属性,表示为冒号隔开的名字值对。有一些7江苏大学本科毕业论文每个MIDlets都可以存在一个可选的应用程序描述文件JAD(ApplicationMIDPProfile所包括的网络支持源于CLDC规范中的通用连接框架GCF(GenericConnectionFramework)。因为移动设备种类繁多,通用连接框架中只nnn8江苏大学本科毕业论文Connection接口是最基本的通用连接类型,它是所有连接接口的根源,即javax.microedition.io包中的所有接口都是基于Connection接口的。其他的连接接口继承Connection中的方法,并且定义了用来访问相关变量和该Connectio类n型动作的方法。(2)InputConnectinOutputConnectionInputConnectio和nOutputConnectin口分别定义了输入流和输出流连接所需要的能力。接口用作原始的输入/输出流,如从Socket连接或文件中读取/写入数据流,这两个接口分别在基本onnectio接n口上增加了两个方法个用来打开用于连接的数据输入/输出流,另一个是用来打开用于连接的输入/(3)StreamConnectionStreamConnection接口定义了流连接所需的能力,可以提供输入流和输出(4)SocketConnection和ServerSocketConnection9江苏大学本科毕业论文第三章Java2MicroEdition概述J2ME体系结构、配置、简表以及优势等具体内容。本章概念性和了解性的内容的上面是一个或者多个J2MEProfile,这些附加的编辑库利用相似设备的类似可选包(OptionalPackage)简表(Profile)配置(Configuration)JAVA虚拟机主机操作系统江苏大学本科毕业论文配置在3层体系结构中起到了承上启下的作用,它定义了针对在总存储空第三,J2ME简表。简表为相同消费电子设备的不同生产厂商提供标准化的殊设备的供应商领导。目前J2ME领域里使用最广泛的是移动信息设备简表(MIDP),它主要是针对手机和其它双向移动通信设备而设计的。此外,CDC规Java技术以其跨平台性,即“一次编写,到处运行”的特点,已经成为智江苏大学本科毕业论文Java编程语言在抽象机制和较高层次的程序构造方面远比当前所用的其他Java提供了多级安全性,从类装载器、字节码验证器到安全管理器,都可江苏大学本科毕业论文第四章手机文本信息的发送和接收无线消息接口函数WMA(WirelessmessageAPI)的短信息收/发软件,学习WMA无线消息接口函数WMA规范设计的目标是那些能够发送和接收文本信息的传输机制可以是GSMSMS(ShortMessageSerBroadcastService,小区广播服务)、CMDASMS或者MMS(Mult江苏大学本科毕业论文PublicMessagenewMessage(Stringtype)——创建一个无线消息实例对PublicvoidsetMessageListener(MessageListenermListener)——为当前连接设置消息监听器。如果当前有消息到来,监听器mListener将调回MessageListene接r口中的notifyIncomingMessa方ge法。(2)MessageListene接r口MessageListene接r口定义了下面的方法。PublicvoidnotifyIncomingMessage(MessageConnecto到来时,notifyIncomingMessa方ge法将被调用,参数conn表示消息连接。(3)Message接口消息API中分别定义了这三种消息类型的接口。Message接口是所有消息类型的父接口,定义了无线消息的基本方法。PublicStringgetAddress()——返回消息的地址。如果当前消息是被发送PublicvoidsetAddress(Stringaddress)——设置与当前消息相关的地址。消息的地址必须符合URL格式。(4)TextMessage接口TextMessage接口描述了文本内容的消息类型,提供了操作文本消息内容的PublicvoidsetPayloadText(Strinata)——设置当前文本消息的内容。江苏大学本科毕业论文java.microedition.io.ConneMessageConnectionmConnc=使用这个无线消息连接的实例对象可以向5550001手机上50000端口上的应用程MessageConnectionmConns=Stringaddress=”sms://5550001:50000”;MessageConnectionmConn=(MessageConnection)Connector.OpenmConn.send(tMsg);江苏大学本科毕业论文}}江苏大学本科毕业论文的协议和窗口,与Connection.open()方法的参数相同,如sms://:50000;<MIDletClassName>表示处理连接的MIDlet;<AllowedSender>表示允许的发送者,该字段起到一个过滤器的作用,指示Java应用管理器只能处理特定发送者(2)接收文本信息。当应用程序运行时,能够异步接收到来的文本信息;江苏大学本科毕业论文r图4.2文本信息软件类图该类是应用程序主类,控制应用程序的生命周期。该类实现了江苏大学本科毕业论文安全因素的考虑,在联网发送文本信息前,将出现如图(b)所提示的江苏大学本科毕业论文图4.5发送、接收文本信息江苏大学本科毕业论文第五章手机的网络通信江苏大学本科毕业论文(1)在服务器端建立监听端口,等待客户端进行ServerSocketConnectionscn=SocketConnectionsc=(SocketConnection)scn.acceptAndOpen();DataInputStreamis=sc.openDataInputStream();DataOutputStreamos=sc.openDataOutputStream();InputStreamis=sc.openInputStream(OutputStreamos=sc.openOutputStream();江苏大学本科毕业论文客户端客户端连接输出数据流输入数据流输入数据流输出数据流服务器连接塞,直到监听到客户端发送的请求为止。当监听到客户端发送的请求之后,ServerSocket对象的accept()方法会返回一个Socket对象以与发送请求的客户端进行基于Socket协议的网络通信。通过这个Socket对象,可以从中得到InputStream对象和OutputStream对象,并由这两个对象得到相应的DataInputStream对象和DataOutputStream对象。在DataInputStream对象和DataOutputStream对象中,分别使用相应的reader()方法和writer()方法可以得到客户端送来的信息和向客户端发送的信放了一定数量的信息才发送出去。源代码见附录B。江苏大学本科毕业论文在URL中先通过“socket”指明其所使用的是Socket协议,接下来的“”指明了服务器端的IP地址,由于服务器端和模拟器运行在同一台江苏大学本科毕业论文江苏大学本科毕业论文此外还创建了一个StringItem对象用于显示接收到的字符串,并且使用ServerSocketConnect接io建立服务器套接字,等待客户机程序的连接。Socket协议的服务器端的功能是通过ServerSocketConnection对象实现的,通过Connector类的open()方法和强制转换类型转化,可以得到一个ServerSocketConnectio对n象的acceptAndOpen()方法等待与服务器端连接的客户端。当客户端连接到服务器端之后,acceptAndOpen方()法会返回一个StreamConnectio对n象,通过强制类型转化,可以得到一个与请求的客户端通象的openDataInputStream()方法DataInputStream对象和DataOutputStream对象。在DataInputStream对象和Sender类是用来完成输出数据流的发送功能的,当服务器端或客户端运行SocketConnection接口,用于连接服务器端。通过SocketConnection对象的DataInputStream对象和DataOutputStream对象。在DataInputStream对象和接收服务器端送来的信息和对服务端发送的信息。整性。源代码见附录C。[5]5.4.2功能的实现江苏大学本科毕业论文江苏大学本科毕业论文图5.5手机与手机通信的运行结果江苏大学本科毕业论文第六章总结与展望再根据需要去查找资料,进而深入研究它的实现方法。江苏大学本科毕业论文江苏大学本科毕业论文江苏大学本科毕业论文[1](simpleteam-无[2]/soft/32289.htm华军软件园[3]左广德。基于J2ME的移动即时通信系统的设计和实现[D]。硕士学位论文,江西师范大26、276~28883~85、299~302、327~332[7]牛晓蕾。基于TCP/IP协议的安全即时通信系统设计与实现[D]。硕士学位论文,西安电[9]JamesWhite.AnintroducationtoJavthings[J].200llEEE.P724一725.[11]Giguere,Eric.J2ME-Optional-Packages[DB\OL]./mobility/midp/articles/optional/,2002.12[15]裴木生、王慕坤。J2ME在移动通信中的应用[J]。电子科技2008年第21卷第8期江苏大学本科毕业论文(1)SMSMIDlet.javapackagestudy.sms;importjavax.microedition.midlet.*;importjavax.microedition.lcdui.*;importjavax.wireless.messaging.MessageListener;importjavax.wireless.messaging.MessageConnection;importjava.io.IOException;publicclassSMSMIDletextendsMIDletimplementsCommandListener,MessageListener{MessageConnectionMessageConnectionmsgConn;SenderFormsender;//短消息发Receiverreceiver;//短消息接收Inboxinbox;//收件箱Displaydisplay;ListmainMenu;CommandcmdExit=newprivate送器private器privateprivateprivateprivateCommand("退出",Command.EXIT,1);privateCommandcmdSelect=newCommand("选择",Command.ITEM,2);privateCommandcmdRead=newCommand("查看",Command.SCREEN,3);privateCommandcmdBack=newCommand("返回",Command.BACK,2);privateprivateprivateAlerterrAlert=null;AlertmessageAlert=null;DisplayablebackDisplayable=null;publicSMSMIDlet(){inbox=newInbox(this);receiver=newReceiver(this,inbox);Stringport=this.getAppProperty("message-port");sender=newSenderForm(this,port);//创建主菜单mainMenu=newList("短消息",Choice.IMPLICIT,newString[]{"发送短消息","收件箱"},null);mainMenu.setSelectCommand(cmdSelect);mainMenu.addCommand(cmdExit);mainMenu.setCommandListener(this);}publicvoidstartApp(){display=Display.getDisplay(this);display.setCurrent(mainMenu);try{//打开一个消息连接,用于接收消息Stringport=this.getAppProperty("message-port");msgConn=receiver.openConnection(pomsgConn.setMessageListener(this);}catch(IOExceptionioe){showError(ioe.toString());}}publicvoidpauseApp(){msgConn=null;receiver.release();//关闭连接}publicvoiddestroyApp(booleanundicational){msgConn=null;receiver.release();//关闭连接}//处理用户界面命令publicvoidcommandAction(Commandcmd,Displayabledisplayable){if(cmd==cmdExit){destroyApp(false);notifyDestroyed();}elseif(cmd==cmdSelect){index=mainMenu.getSelectedIndex();江苏大学本科毕业论文if(mainMenu.getString(index).equals("发送短消息")){sender.showUI();}elseif(mainMenu.getString(index).equals("收件箱")){inbox.showUI(display.getCurrent());}}elseif(cmd==cmdBack){display.setCurrent(backDisplayable);}elseif(cmd==cmdRead){inbox.showUI(backDisplayable);}}//显示错误信息publicvoidshowError(StringerrMsg){if(errAlert==null){Imageimg=null;try{img=Image.createImage("/error.png");}catch(IOExceptionioe){}errAlert=newAlert("错误",errMsg,img,AlertType.ERROR);errAlert.setTimeout(2000);}Displayabled=display.getCurrent();errAlert.setString(errMsg);display.setCurrent(errAlert,d);}//通知用户收件箱收到一条新信息publicvoidnotifyUser(){if(messageAlert==null){Imageimg=null;try{img=Image.createImage("/message.png");}catch(IOExceptionioe){}messageAlert=newAlert("信息","收到一条短信息!",img,AlertType.INFO);messageAlert.setTimeout(Alert.FOREVmessageAlert.addCommand(cmdBack);ageAlert.addCommand(cmdRead);messageAlert.setCommandListener(this);}if(display.getCurrent()!=inbox){backDisplayable=display.getCurrent();}display.setCurrent(messageAlert);}//当有消息到来时,监听连接的监听器回调该方法publicvoidnotifyIncomingMessage(MessageConnectioif(conn==msgConn){receiver.handleMessage();}}//返回主菜单publicvoidBackToMainMenu(){display.setCurrent(mainMenu);}}(2)SenderForm.javapackagestudy.sms;importjavax.microedition.io.Connector;importjavax.wireless.messaging.MessageConnection;importjavax.wireless.messaging.TextMessage;importjava.io.IOException;importjavax.microedition.lcdui.*;publicclassSenderFormextendsFormimplementsRunnable,CommandListener{privateSMSMIDletmidlet;privateStringdesPort;//目的端口privateStringreceiverAddress="";//收件人地址江苏大学本科毕业论文privateStringmessageContent="";//发送的消息privateprivateprivateTextFieldtfPhoneNumber;TextFieldtfMessageContent;CommandcmdBack=newCommand("返回",Command.BACK,1);privateCommandcmdSend=newCommand("发送",Command.SCREEN,2);publicSenderForm(SMSMIDletmidlet,StringdesPort){super("编辑短消息");this.midlet=midlet;this.desPort=desPort;//构造用户界面tfPhoneNumber=newTextField("收件人号码:","",20,TextField.PHONENUMBER);tfMessageContent=newTextField("消息内容:","",140,TextField.ANY);tfMessageContent.setPreferredSize(-1,append(tfPhoneNumber);append(tfMessageContent);addCommand(cmdBack);addCommand(cmdSend);setCommandListener(this);}//显示信息输入界面publicvoidshowUI(){Displaydisplay=Display.getDisplay(midlet);display.setCurrent(this);}//处理用户界面命令publicvoidcommandAction(Commandcmd,Displayabledisplayable){if(cmd==cmdBack){midlet.BackToMainMenu();}elseif(cmd==cmdSend){this.messageContent=tfMessageContent.getString();this.receiverAddress=tfPhoneNumber.getString();if(!receiverAddress.equals("")){//创建并启动短消息发送线程Threadt=newThread(this);t.start();}}}//短消息发送线程执行体,建立连接并发送短消息publicvoidrun(){try{StringsmsUrl="sms://"+receiverAddress+":"+desPort;MessageConnectionmsgConn=(MessageConnection)Connector.open(smsUrl);TextMessagetextMessage=(TextMessage)msgConn.newMessage(MessageConnection.TEXT_MESSAGE);textMessage.setPayloadText(messageContent);msgConn.send(textMessage);msgConn.close();}catch(IOExceptionioe){midlet.showError("发送消息错误!\n"+ioe.toString());}}}(3)Receiver.javapackagestudy.sms;importjavax.wireless.messaging.MessageConnection;importjavax.wireless.messaging.TextMessage;importjavax.wireless.messaging.Message;importjava.io.IOException;importjavax.microedition.io.Connector;publicclassReceiverimplementsRunnable江苏大学本科毕业论文{privateSMSMIDletmidlet;privateintpendingMessage;privatebooleandead=true;privateMessageConnectionmsgConn;privateInboxinbox;publicReceiver(SMSMIDletmidlet,Inboxinbox){this.midlet=midlet;this.inbox=inbox;}//在端口Port打开一个SMS连接,并启动一个接收消息的线程publicMessageConnectionopenConnection(Stringport)throwsIOException{msgConn=(MessageConnection)Connector.open("sms://:"+port);pendingMessage=0;dead=false;//创建消息接收线程,并启动Threadt=newThread(this);t.start();returnmsgConn;}//终止线程publicsynchronizedvoidrelease(){try{msgConn.setMessageListener(null);dead=true;notify();//通知线程}catch(IOExceptionioe){}}//处理消息publicsynchronizedvoidhandleMessage(){pendingMessage++;notify();}//返回收件箱publicInboxgetInbox(){returninbox;}//接收到来的消息publicvoidrun(){while(!dead){synchronized(this){while(!dead&&pendingMessage==0){try{wait();}catch(InterruptedExceptionie){}}}if(!dead){try{Messagemessage=msgConn.receive();pendingMessage--;if(messageinstanceofTextMessage){inbox.add((TextMessage)message);midlet.notifyUser();}else{midlet.showError("不能解析的消息格}}catch(IOExceptionioe){midlet.showError("接收信息错误!\n"+ioe.toString());}}}try{msgConn.close();msgConn=null;}catch(IOExceptionioe){}}}江苏大学本科毕业论文(4)Inbox.javapackagestudy.sms;importjavax.microedition.lcdui.*;importjavax.wireless.messaging.TextMessage;importjava.util.Vector;publicclassInboxextendsFormimplementsCommandListener{privateSMSMIDletmidlet;privateVectorcontents;privateVectorphoneNumbers;privateintindex=-1;privateStringItemsiPN;privateStringItemsiContent;privateCommandcmdBack;privateCommandcmdNext;privateDisplayablebackScreen;publicInbox(SMSMIDletmidlet){super("编辑短消息");this.midlet=midlet;contents=newVector();phoneNumbers=newVector();//创建收件箱图形用户界面siPN=newStringItem("发件人:","");siContent=newStringItem("内容:","");append(siPN);append(siContent);cmdBack=newCommand("返回",Command.BACK,1);cmdNext=newCommand("下一条",Command.SCREEN,2);addCommand(cmdBack);addCommand(cmdNext);setCommandListener(this);}//收件箱中添加一条文本消息publicvoidadd(TextMessagemsg){Stringpn=msg.getAddress();intaindex=pn.indexOf(":");phoneNumbers.addElement(pn.substring(aindex+1));contents.addElement(msg.getPayloadT}//显示收件箱用户界面publicvoidshowUI(DisplayablebackScreen){this.backScreen=backScreen;Displaydisplay=Display.getDisplay(midlet);index=phoneNumbers.size();if(index==0){Alertalert=newAlert("","",null,AlertType.INFO);alert.setTimeout(2000);display.setCurrent(alert,backScreen);}else{next();display.setCurrent(this);}}privatevoidnext(){index--;if(index==-1){index=phoneNumbers.size()-1;}siPN.setText((String)phoneNumbers.elementAt(index));siContent.setText("\n"+(String)contents.elementAt(index));}//处理用户界面命令publicvoidcommandAction(Commandcmd,Displayabled){if(cmd==cmdBack){Displaydisplay=Display.getDisplay(midlet);display.setCurrent(backScreen);}elseif(cmd==cmdNext){next();}}}ext());江苏大学本科毕业论文(1)SocketClient.javapackagej2mestudy.liaotian;importjavax.microedition.lcdui.*;importjavax.microedition.midlet.*;publicclassSocketClientextendsMIDletimplementsCommandListener{privateDisplaydisplay;privateFormf;privateTextFieldtf;privateCommandcommand;privateStringItemsi;publicSocketClient(){display=Display.getDisplay(this);f=newForm("socketclient测试");command=newCommand("发送",Command.ITEM,1);f.addCommand(command);f.setCommandListener(this);tf=newTextField("请输入文字:",null,10,TextField.ANY);f.append(tf);si=newStringItem(null,"");f.append(si);}publicvoidstartApp(){display.setCurrent(f);}publicvoidcommandAction(Commandcommand,Displayabledisplayable){SocketThread(tf.getString(),si).start();}publicvoidpauseApp(){}publicvoiddestroyApp(booleanunconditional){}}(2)SocketServer.javapackagej2mestudy.liaotian;importjava.io.*;import.*;publicclassSocketServer{publicstaticvoidmain(Stringargs[]){try{ServerSocketss=newServerSocket(12345);System.out.println("server启动");while(true){Sockets=ss.accept();DataInputStreamdis=newDataInputStream(s.getInputStream());DataOutputStreamdos=newDataOutputStream(s.getOutputStream());StringBufferbuffer=newbuffer.append(dis.readUTF());dos.writeUTF(buffer.toString());dos.flush();System.out.println(buffer.toString());}}catch(Exceptione){}}}(3)SocketThread.javapackagej2mestudy.liaotian;importjavax.microedition.lcdui.*;江苏大学本科毕业论文importjavax.microedition.io.*;importjava.io.*;publicclassSocketThreadextendsThread{privateStringcontext;privateStringItemsi;publicSocketThread(Stringc,StringItems){context=c;si=s;}publicvoidrun(){Stringurl="socket://:12345";SocketConnectionsc=null;DataInputStreamdis=null;DataOutputStreamdos=null;StringBufferbuffer=newStringBuffer();try{sc=(SocketConnection)Connector.opendis=sc.openDataInputStream();dos=sc.openDataOutputStream();dos.writeUTF(context);dos.flush();buffer.append(dis.readUTF());}catch(Exceptione){}finally{si.setText(si.getText()+buffer+"\n");try{if(dos!=null){dos.close();}if(dis!=null){dis.close();}if(sc!=null){sc.close();}}catch(Exceptione){}}}}江苏大学本科毕业论文(1)Sender.javapackagej2mestudy.socket.liaotian;importjava.io.*;publicclassSenderextendsThread{privateOutputStreamos;//输出流privateStringmessage;//用于发送的数据publicSender(OutputStreamos){this.os=os;//设置用于发送数据的输出流start();//启动发送线程}//同步方法,接收需发送的字符串publicsynchronizedvoidsend(Stringmessage=msg;//接收需发送的数据notify();//唤醒线程}publicsynchronizedvoidrun(){//同步方法runwhile(true){接if(message==null){try{wait();}catch(InterruptedExceptione){}}//唤醒后如果需发送的数据仍为空,则线程结束if(message==null)break;try{os.write(message.getBytes());os.write("\r\n".getBytes());}catch(IOExceptionioe){System.out.println("错误:"+ioe.getMessage());}空,进入等待状态message=null;}}publicsynchronizedvoidstop(){//同步方法,用于停止线程message=null;//将需发送的数据设为空notify();//唤醒线程}}(2)SocketClient.javapackagej2mestudy.socket.liaotian;importjavax.microedition.midlet.*;importjavax.microedition.io.*;importjavax.microedition.lcdui.*;importjava.io.*;publicclassSocketClientextendsMIDletimplementsRunnable,CommandListener{privateDisplaydisplay;privateFormf;privateTextFieldtf;//用于输入要发送的字符串privateStringItemsi;//用于显示接收到的字符串privateCommandsendCommand=newCommand("发送",Command.ITEM,1);privateCommandexitCommand=newCommand("退出",Command.EXIT,1);////套接字//输//输出流//用连接InputStreamis;入流OutputStreamos;Sendersender;于发送数据的线程publicSocketClient(){display=Display.getDisplay(this);f=newForm("SocketClient");tf=newTextField("发送:","",30,江苏大学本科毕业论文TextField.ANY);si=newStringItem("状态:","");f.append(tf);f.append(si);f.addCommand(exitCommand);f.addCommand(sendCommand);f.setCommandListener(this);display.setCurrent(f);}publicvoidstartApp(){newThread(this).start();//开始客户端连接的线程}publicvoidrun(){try{//客户端套接字,连接到主机localhost的5000端口sc=(SocketConnection)Connector.open("socket://localhost:5000");si.setText("连接到服务器");//设置当前显示的状态is=sc.openInputStream();//打开输入流os=sc.openOutputStream();//打开输出流sender=newSender(os);//建立线程,用于发送数据while(true){//永久循环,用于接收数据并显示StringBuffersb=newStringBuffer();sb.append((char)c);}if(c==-1)break;//输入流关闭,跳出循环si.setText("接收到消息-"+sb.toString());//显示收到的数据}////关闭输入/输出流和Socket连接//si.setText("连接关闭");设置当前显示的状态f.removeCommand(sendCommand);}catch(ConnectionNotFoundExceptione){运行服务器端");destroyApp(true);notifyDestroyed();}catch(Exceptione){System.out.println("错误:"+e.getMessage());}}publicvoidpauseApp(){}publicvoiddestroyApp(booleanunconditional){stop();}publicvoidcommandAction(Commandc,Displayables){if(c==exitCommand){destroyApp(true);notifyDestroyed();}if(c==sendCommand){sender.send(tf.getString());//将输入的字符串发送}}//关闭输入/输出流和Socket连接publicvoidstop(){try

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论