Maximum size of data that can be fetched from a client socket using socketChannel of nio package in java
<p>Using <code>SocketChannel sc =(SocketChannel)key.channel();</code>, we can fetch data from port into buffer.<br />
In order to receive the data continuously from port without the loss of data, how the code should be ?</p>

<p>Here is my code</p>

<pre><code>import java.io.*;
import java.net.*;
import java.nio.*;
import java.nio.channels.*;
import java.util.*;

public class MultiPortEcho
{
  private int ports[];
  private ByteBuffer echoBuffer = ByteBuffer.allocate(32000);

  public MultiPortEcho( int ports[] ) throws IOException
  {
    this.ports = ports;
    go();
  }

  private void go() throws IOException
  {
    // Create a new selector
    Selector selector = Selector.open();

    // Open a listener on each port, and register each one
    // with the selector
    for (int i=0; i&lt;ports.length; ++i)
    {
      ServerSocketChannel ssc = ServerSocketChannel.open();
      ssc.configureBlocking( false );
      ServerSocket ss = ssc.socket();
      InetSocketAddress address = new InetSocketAddress( ports[i] );
      ss.bind( address );

      SelectionKey key = ssc.register( selector, SelectionKey.OP_ACCEPT );

      System.out.println( "Going to listen on "+ports[i] );
    }

    while (true)
    {
      int num = selector.select();
      System.out.println("num::::"+num);
      Set selectedKeys = selector.selectedKeys();
      Iterator it = selectedKeys.iterator();

      while (it.hasNext())
      {
        SelectionKey key = (SelectionKey)it.next();

        if ((key.readyOps() &amp; SelectionKey.OP_ACCEPT)== SelectionKey.OP_ACCEPT)
          {
              // Accept the new connection
        ServerSocketChannel ssc = (ServerSocketChannel)key.channel();
        SocketChannel sc = ssc.accept();
        sc.configureBlocking( false );

        // Add the new connection to the selector
        SelectionKey newKey = sc.register(selector,SelectionKey.OP_READ);
        it.remove();

        System.out.println( "Got connection from "+sc );
        }
          else if ((key.readyOps() &amp; SelectionKey.OP_READ)== SelectionKey.OP_READ)
          {
        // Read the data
        SocketChannel sc =(SocketChannel)key.channel();
        System.out.println("sc::::"+sc);
        // data to fetched from channel and dump into the datatbase
        int bytesEchoed = 0;
        //while(true)
        {
        echoBuffer.clear();
        int r = sc.read(echoBuffer);
        System.out.println("r:::" + r);
        /*int pos=echoBuffer.position();
        System.out.println("pos:::" +pos);*/
        if (r == -1)
        {
         //echoBuffer.flip();
         echoBuffer.rewind();
         byte[] array = new byte[100000];
         while (echoBuffer.hasRemaining())
         {
          int n = echoBuffer.remaining();
          System.out.println("size:" + n);
          echoBuffer.get(array,0,n );
          System.out.println(new String(array,0,n));
          key.cancel();
          it.remove();

         }

        }

        /*int pos=echoBuffer.position();
        System.out.println("pos:::" + pos);
        if(r&lt;=0)
        {
         echoBuffer.flip();
         for (int j = 0; j &lt; pos; j++ )
         {
          String ss =Integer.toHexString(echoBuffer.get());
          if (ss.length() == 1)
           System.out.print("0" + ss + " ");
          else if (ss.length() &gt; 2)
           System.out.print(ss.substring(6) + " ");
          else System.out.print(ss + " ");
                        }
          break;
        }

        echoBuffer.flip();

        sc.write( echoBuffer );
        bytesEchoed += r;*/
              }

             //System.out.println( "Echoed "+bytesEchoed+" from "+sc );
             //it.remove();
        }

      }

//System.out.println( "going to clear" );
//      selectedKeys.clear();
//System.out.println( "cleared" );
    }
  }

  static public void main( String args[] ) throws Exception
  {
    FileOutputStream fileoutputstream = new FileOutputStream("MultiPort.txt", false);
    PrintStream printstream = new PrintStream(fileoutputstream);
    System.setOut(printstream);
    if (args.length&lt;=0) {
      System.err.println( "Usage: java MultiPortEcho port [port port ...]" );
      System.exit( 1 );
    }

    int ports[] = new int[args.length];

    for (int i=0; i&lt;args.length; ++i) {
      ports[i] = Integer.parseInt( args[i] );
    }

    new MultiPortEcho( ports );
  }
}
</code></pre>
