title: Maximum size of data that can be fetched from a client socket using socketChannel of nio package in java
body: <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>