Note that there are some explanatory texts on larger screens.

plurals
  1. POMaximum size of data that can be fetched from a client socket using socketChannel of nio package in java
    primarykey
    data
    text
    <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>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload