This tip shows you how to develop a New I/O-based client. As you probably know, NIO offers many advantages such as speed and the ability to maintain a large number of concurrent connections. Here’s the code:
import java.io.*;import java.nio.*;import java.net.*;import java.util.*;import java.nio.channels.*;import java.nio.charset.*;public class ClientNIO{ public static void main(String args[]) { InetSocketAddress ISA=null; SocketChannel clientNIO=null; Selector selector=null; SelectionKey key=null; int port=5000; try{ clientNIO=SocketChannel.open(); clientNIO.configureBlocking(false); }catch(IOException e) {System.out.println(e.getMessage());} try{ InetAddress addr=InetAddress.getByName("localhost"); ISA=new InetSocketAddress(addr,port); }catch(UnknownHostException e) {System.out.println(e.getMessage());} try{ clientNIO.connect(ISA); }catch(IOException e) {System.out.println(getMessage());} try{ selector = Selector.open(); }catch(IOException e) {System.out.println(e.getMessage());} try{ SelectionKey clientKey=clientNIO.register(selector,SelectionKey.OP_CONNECT); }catch(Exception e) {System.out.println(e.getMessage());} try{ while(selector.select(1000)>0) { Set keys=selector.selectedKeys(); Iterator iter=keys.iterator(); while(iter.hasNext()) { key=(SelectionKey)iter.next(); iter.remove(); SocketChannel channel=(SocketChannel)key.channel(); if((key.isValid())&&(key.isConnectable())) { if(channel.isConnectionPending())channel.finishConnect(); ByteBuffer serverBuf = null; System.out.println("Connected..."); while(true) { serverBuf = ByteBuffer.wrap(new String("Answer me dear server ...").getBytes()); channel.write(serverBuf); serverBuf.clear(); ByteBuffer clientBuf = ByteBuffer.allocateDirect(1024); clientBuf.clear(); channel.read(clientBuf); clientBuf.flip(); Charset charset=Charset.forName("ISO-8859-1"); CharsetDecoder decoder = charset.newDecoder(); CharBuffer charBuffer = decoder.decode(clientBuf); System.out.println(charBuffer.toString()); clientBuf.clear(); } } } } }catch(IOException e) {System.out.println(e.getMessage()); try{ key.channel().close();key.cancel(); }catch(Exception ex) {System.out.println(e.getMessage());}} }