how i can send a receive a data from second time using the same open socket in mule java? -


hi on forum, on ocassion need community because don't understand how keep open socket send , receive data device. instance when send first command receive answer, receive answer, after first send/receive when i'm trying send second command have no response , in ocassions throws error.

this class used in mule 3.5 ce java 1.7

public class tcpmuleoutbasic extends tcpmessagereceiver {        public tcpmuleoutbasic(connector connector, flowconstruct flowconstruct,              inboundendpoint endpoint) throws createexception {          super(connector, flowconstruct, endpoint);      }       protected work creatework(socket socket) throws ioexception {          return new mytcpworker(socket, this);      }        protected class mytcpworker extends tcpmessagereceiver.tcpworker {           public mytcpworker(socket socket, abstractmessagereceiver receiver)                  throws ioexception {              super(socket, receiver);              // todo auto-generated constructor stub          }           @override          protected object getnextmessage(object resource) throws exception {              arraylist<string> testarr2 = new arraylist<>();              bufferedreader entrada;              //socket clientsocket = null;              try{                  arraylist<string> testarr = new arraylist<>();                   //this.socket.                  //clientsocket = this.socket;                   //open in buffer, de entrada                  entrada = new bufferedreader(new inputstreamreader(this.socket.getinputstream()));                  //open out buffer de salida envia comando                   printstream pingstream = new printstream(this.socket.getoutputstream());                   //printstream pingstream = new dataoutputstream(clientsocket.getoutputstream());                   system.out.println("status socket val 1.2: "+this.socket.isclosed()+" con "+isconnected());                  testarr = this.enviarcomando("#ser",1,this.socket,entrada,pingstream);                  system.out.println("array valor 1: " + testarr.get(0));                   //open second time, problem dont work                   //abro buffer de entrada                  entrada = new bufferedreader(new inputstreamreader(this.socket.getinputstream()));                  //abro buffer de salida envia comando                   pingstream = new printstream(this.socket.getoutputstream());                    system.out.println("status socket val 2: "+this.socket.isclosed()+" con "+isconnected());                  testarr2 = this.enviarcomando("#nlo",2,this.socket,entrada,pingstream);                  /*system.out.println("arreglo valor 2: " + testarr2.get(0));*/                   datain.close();                  return testarr;              }catch(ioexception e)              {                  system.out.println("error arreglo:"+e.getmessage());                  return null;              }           }//fin nextmessange           //metodo para hacer peticion          //function send recive data          protected arraylist<string> enviarcomando (string comando,int req,socket opensocket,bufferedreader entrada,printstream pingstream) throws exception {              boolean initconnection = false;              string lineacomando;              string mensajeservidor;              socket clientsocket = null;              arraylist<string> retorno = new arraylist<string>();               try{                   if (initconnection == false) {                      lineacomando = comando;                      system.out.println("mandando comandos:"+lineacomando);                      clientsocket = opensocket;                      string direccion = clientsocket.getinetaddress().gethostaddress();                      system.out.println("direccion:"+direccion);                      system.out.println("cliente en lĂ­nea ="+req);                          system.out.println("comando enviado:" + lineacomando);                      lineacomando = lineacomando + crc.getcrc16ccitt(lineacomando) + "\r";                      pingstream.print(lineacomando);                       //entrada = new bufferedreader(new inputstreamreader(clientsocket.getinputstream()));                      //entrada.ready();                      system.out.println("status flujo de entrada ="+req+entrada.ready());                        int contador = 0;                      system.out.println("entrada: "+entrada.tostring());                      while((mensajeservidor = entrada.readline()) != null) //mientras haya mensajes desde el cliente                      {                              contador++;                          //se muestra por pantalla el mensaje recibido                          retorno.add(mensajeservidor);                           system.out.println("mensaje dispositivo "+contador+ ": "+ mensajeservidor);                      }                      /*                      lineacomando = "#nlo";                      system.out.println("mandando 2do comandos:"+lineacomando);                      lineacomando = lineacomando + crc.getcrc16ccitt(lineacomando) + "\r";                      pingstream.print(lineacomando);                      while((mensajeservidor = entrada.readline()) != null) //mientras haya mensajes desde el cliente                      {                              contador++;                          //se muestra por pantalla el mensaje recibido                          retorno.add(mensajeservidor);                           system.out.println("mensaje dispositivo segundo"+contador+ ": "+ mensajeservidor);                      }*/                        initconnection = true;                  }                   //datain.close();                  initconnection = false;                  logger.debug("socket timeout");                  system.out.println("cierro socket");                  return retorno;              }catch (socketexception e )              {                  system.out.println("error f:"+e.getmessage()+" "+comando+" request: "+req);                  return null;              }          }      }  }  

the connector , flow.

    <tcp:connector name="tcp" doc:name="tcp connector"      clientsotimeout="100000" receivebacklog="0" receivebuffersize="0"      sendbuffersize="0" serversotimeout="100000" socketsolinger="0"      validateconnections="true"  keepsendsocketopen="true" keepalive="true">      <receiver-threading-profile          maxthreadsactive="5" maxthreadsidle="5" />      <reconnect-forever />      <!--  <service-overrides messagereceiver="tcpmuleout" />-->      <service-overrides messagereceiver="ve.com.comware.socket.tcpmuleoutbasic" />      <tcp:direct-protocol payloadonly="true" />  </tcp:connector>  <flow name="socketcomware0.1flow1" doc:name="socketcomware0.1flow1">          <tcp:inbound-endpoint  host="107.170.3.231" port="2020"  doc:name="tcp" responsetimeout="100000" exchange-pattern="request-response"/>          <logger message="hola1" level="info" doc:name="logger"/>          <logger message="test  ----------------- #[message.payload[0]]  -------------------#[message.payload[1]]  " level="info" doc:name="logger"/>  </flow>         

the error:

 org.mule.exception.defaultsystemexceptionstrategy: caught exception in exception strategy: index: 0, size: 0  java.lang.indexoutofboundsexception: index: 0, size: 0      @ java.util.arraylist.rangecheck(arraylist.java:635)      @ java.util.arraylist.get(arraylist.java:411)      @ ve.com.comware.socket.tcpmuleoutbasic$mytcpworker.getnextmessage(tcpmuleoutbasic.java:65) 

please try , let me know can understand usecase -

   <tcp:connector name="tcp1" validateconnections="true" sendbuffersize="0" receivebuffersize="0" receivebacklog="0" clientsotimeout="10000" serversotimeout="10000" socketsolinger="0" doc:name="tcp">     <tcp:direct-protocol payloadonly="false"/> </tcp:connector>   <flow name="tcp-testflow">         <tcp:inbound-endpoint exchange-pattern="request-response" host="${host}" port="${port}" responsetimeout="10000" connector-ref="tcp1" doc:name="tcp"/>         <logger message="this client sending - #[payload]" level="info" doc:name="logger"/>         <set-payload value="hello server - #[payload]" doc:name="set payload"/>     </flow> 

Comments