Yeah Jon, you're right about flush, the wrong thing is really the IoBuffer. I put the: session.getConfig().setReadBufferSize(16*1024), on connector as you told me.
I changed now for what you answered me, like this: if(size > 0){ while (buffer.hasRemaining()){ byte[] payload = new byte[size]; buffer.get(payload); data = new String( payload, "ISO-8859-1"); } } I'm receiving from de server 2685 bytes and I set the buffer to 64*1024, and I'm still having the error: D/WEB(26934): java.nio.BufferUnderflowException. I saw that setting tcpnodelay = false becomes better, I got make 3 requests without error, but after the error happens again, and I have to restart the session again. Do I have to finish something in the IoBuffer after receive the data? Note that I'm not opening another session, I open one time and stay changing data all the time. The rest is functioning very well, one by one minute I send something and the server answer quickly, the only problem now is this big request that one time goes another time not. Thank's again. LUCIANO -----Mensagem original----- De: Jon V. [mailto:sybersn...@gmail.com] Enviada em: segunda-feira, 2 de setembro de 2013 19:26 Para: users@mina.apache.org Assunto: Re: Send/Receive IoBuffer On Mon, Sep 2, 2013 at 5:37 PM, Luciano Coelho <luci...@lvcsistemas.com>wrote: > Hello everybody. > > > > I'm learning how to use Mina and my questions are: > > > > I solved my problem of having a answer from my server without closing > the session like this: > > > > System.out.flush(); > This really gives me an indication of your Java knowledge. System.out is your access to stdout in Java. It is what you use to print things to the console. It has nothing to do with your application. Maybe posting on StackOverflow would be a good idea for general java help? > > > > Is that ok? > > > > I'm receiving the answer in Android via GPRS like this: > > > > First I set this on sessionCreated > > session.getConfig().setReadBufferSize(16*1024); > > > You should set this in Mina config. It is not good to change on the fly like this. Read the Quick Start Guide: http://mina.apache.org/mina-project/quick-start-guide.html > > @Override public void messageReceived(IoSession session, Object > message) throws Exception { > > IoBuffer buffer > = (IoBuffer) message; > > int service > = (Integer) session.getAttribute("SERVICE"); > > Listener listener > = (Listener) session.getAttribute("LISTENER"); > > String data > = ""; > > int size > = buffer.getInt(); > > while (buffer.hasRemaining()){ > > data += (char) buffer.get(); > Using the += is the worst possible way to build a String. Since you are reading a String. Are you sure that the String is encoded using 8 bits? byte[] payload = new byte[size]; buffer.get(payload); String data = new String( payload, "UTF-8"); > > } > > if(size == data.trim().length()){ > Why are you trying to trim the string? Are you expecting whitespaces? > > if(listener != null) > listener.requisitionFinished(data, service); > > } else { > > if(listener != null) > listener.requisitionFinished("", service); > > } > > Log.d("WEB", "SERVICE: " + service + " SIZE: " + size + " > DATA: " + data); > > } > > > > Sometimes I receive the data in parts, when the message arriving is > too long and it causes an error, even if the buffersize is bigger than > the data I'm receiving. > > > > Thank's a lot. > > > > Luciano Coelho > >