importjava.io.BufferedReader;importjava.io.InputStreamReader;importjava.net.InetSocketAddress;importjava.nio.ByteBuffer;importjava.nio.channels.SelectionKey;importjava.nio.channels.Selector;importjava.nio.channels.SocketChannel;importjava.util.Iterator;class ClientThread implementsRunnable
{privateSelector selector;private booleanrunning;publicClientThread(Selector selector)
{this.selector =selector;
}
@Overridepublic voidrun()
{while(this.running)
{try{while(selector.select()>0)
{
Iterator iter =selector.selectedKeys().iterator();while(iter.hasNext())
{
SelectionKey key=iter.next();
iter.remove();if(key.isConnectable())
{
SocketChannel channel=(SocketChannel)key.channel();
channel.configureBlocking(false);
channel.finishConnect();
channel.register(this.selector, SelectionKey.OP_READ |SelectionKey.OP_WRITE);
System.out.println("+++++connect server success++++");
channel.write(ByteBuffer.wrap("hello client\n".getBytes()));
}else if(key.isReadable())
{
SocketChannel channel=(SocketChannel)key.channel();
ByteBuffer buffer= ByteBuffer.allocate(1024);
System.out.print("message from server:-->");int len=0;while((len = channel.read(buffer))>0)
{
buffer.flip();
System.out.println(new String(buffer.array(), 0, len));
buffer.clear();
}
channel.register(this.selector, SelectionKey.OP_WRITE);
}else if(key.isWritable())
{
SocketChannel channel=(SocketChannel)key.channel();
System.out.print("please enter:");
BufferedReader reader= new BufferedReader(newInputStreamReader(System.in));
String line=reader.readLine();
channel.write(ByteBuffer.wrap((line+"\n").getBytes()));
channel.register(this.selector, SelectionKey.OP_READ);
}
}
Thread.sleep(2000);
}
}catch(Exception e)
{this.running = false;
System.out.println("Error in poll loop of client");
System.out.println(e.getMessage());
}
System.out.println("rttttt");
}
System.out.println("11111");
}
}public classNioTcpClient4
{public static voidmain(String[] args)
{
SocketChannel client= null;
Selector selector= null;try{
client=(SocketChannel)SocketChannel.open();
client.configureBlocking(false);
client.connect(new InetSocketAddress("localhost", 1001));
selector=Selector.open();
client.register(selector, SelectionKey.OP_CONNECT);
}catch(Exception e)
{
System.out.println("client can't setup");
}new Thread(newClientThread(selector)).start();
System.out.println("asa");
}
}