Sou novo neste portal e tb iniciei o meu aprendizado em java a pouco tempo.
Estou trabalhando em uma aplicação onde recebo um “trem” de pacotes UDP da seguinte maneira:
–***–
onde:
pacote udp
– gap entre os pacotes.
Eu tenho que ficar fazendo a recepção desses pacotes até que o numero de pacotes chegar ao fim ou então se nenhum pacote chegar em x segundos, tenho que parar a recepção e dar sequencia no programa.
Estou utilizando as classes Connector, Datagram e DatagramConnection do J2ME , mas ao contrário do J2SE não há possibilidade de setar este tempo de timeout, á unica opção que eu tenho é na hora que eu crio a conexão (método Connector. open()) de setar uma opção para receber exceções de timeout, mas não tenho como determinar este tempo e eu preciso fazer isto.
Já procurei por tudo não achei nada de concreto, se alguem puder me dar uma diga fico muito agradecido.
importjavax.microedition.lcdui.*;importjavax.microedition.midlet.*;importjavax.microedition.io.*;importjava.util.*;publicclassUDPTestextendsMIDletimplementsCommandListener{staticfinalStringhostname="203.123.12.201";staticfinalintserverport=9000;privateFormmainScreen=null;staticfinalintsendport=9000;staticfinalintreceiveport=9001;privateFormresultScreen=null;staticbooleanisOver=false;TextFieldmessage=null;privateCommandokCommand=newCommand("OK",Command.OK,1);privateCommandbackCommand=newCommand("Voltar",Command.BACK,2);privateCommandexitCommand=newCommand("Sair",Command.EXIT,2);privateDisplaymyDisplay;publicUDPTest(){myDisplay=Display.getDisplay(this);resultScreen=newForm("Result");resultScreen.addCommand(okCommand);resultScreen.setCommandListener(this);mainScreen=newForm("UDP Testing");message=newTextField("Message:"," ",90,TextField.ANY);// mainScreen = new List("UDP Test", List.IMPLICIT); }publicvoidstartApp()throwsMIDletStateChangeException{mainScreen.append(message);mainScreen.addCommand(okCommand);mainScreen.addCommand(exitCommand);mainScreen.setCommandListener(this);myDisplay.setCurrent(mainScreen);}publicvoidpauseApp(){}publicvoiddestroyApp(booleanunconditional){}publicvoidcommandAction(Commandc,Displayabled){Stringres=null;if((c==okCommand)&&(d==mainScreen)){// int selected = mainScreen.getSelectedIndex();try{//switch (selected) {// case 0: res=sendRequest(message.getString());resultScreen.append(res);myDisplay.setCurrent(resultScreen);// break;// }}catch(Exceptione){System.err.println(e);}}if((c==exitCommand)&&(d==mainScreen)){notifyDestroyed();}if((c==okCommand)&&(d==resultScreen)){myDisplay.setCurrent(mainScreen);}}StringsendRequest(Stringrequest){DatagramListenerdgl=newDatagramListener("datagrama://:"+receiveport);dgl.start();doSend("datagrama://"+hostname+":"+serverport,request);intcounter=0;outloop:while(!isOver){if(counter++>5)breakoutloop;try{Thread.sleep(1000);}catch(Exceptione){System.out.println("Acorda Neo!");}}isOver=false;returndgl.data;return"Sent";}voiddoSend(StringdestAddr,Stringmsg){intlength=msg.length();byte[]message=newbyte[length];DatagramConnectiondc=null;System.arraycopy(msg.getBytes(),0,message,0,length);Stringlocalhost="datagrama://localhost:"+sendport;try{dc=(DatagramConnection)Connector.open(localhost);Datagramdobject=dc.newDatagram(message,length,destAddr);dc.send(dobject);}catch(Exceptione){System.out.println("Failed to send message: "+e);}finally{if(dc!=null){try{dc.close();}catch(Exceptionf){System.out.println("Flha ao fechar conector: "+f);}}}}classDatagramListenerextendsThread{DatagramConnectiondc=null;Datagramdobject;Stringdata="error";DatagramListener(StringrecvAddr){try{dc=(DatagramConnection)Connector.open(recvAddr);dobject=dc.newDatagram(dc.getMaximumLength());}catch(Exceptione){System.out.println("Falha ao finalizar o conector: "+e);}}publicvoidrun(){try{dc.receive(dobject);data=newString(dobject.getData(),0,dobject.getLength());isOver=true;}catch(Exceptione){System.err.println("Falha ao receber msg:"+e);}finally{if(dc!=null){try{dc.close();}catch(Exceptionf){System.err.println("Flaha ao fechar conexão: "+f);}}}}}}