JAVA nio 简单使用
Posted duangl
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA nio 简单使用相关的知识,希望对你有一定的参考价值。
nio 模拟客户端和服务器互相通讯--传输一个int值,并且不断的+1;
服务器
public class Server
public static void main(String[] args)
try
ServerSocketChannel server=ServerSocketChannel.open().bind(new InetSocketAddress(8881));
server.configureBlocking(false);
Selector selector=Selector.open();
server.register(selector,SelectionKey.OP_ACCEPT);
for(;;)
selector.select();
Set<SelectionKey> keys = selector.selectedKeys();
Iterator<SelectionKey> iterator = keys.iterator();
while(iterator.hasNext())
SelectionKey next = iterator.next();
if(next.isAcceptable())
acceptHandle(next, selector);
if (next.isReadable())
doRead(next, selector);
iterator.remove();
Thread.sleep(2000);
catch (IOException e)
// TODO Auto-generated catch block
e.printStackTrace();
catch (InterruptedException e)
// TODO Auto-generated catch block
e.printStackTrace();
public static void acceptHandle(SelectionKey key,Selector selector) throws IOException
ServerSocketChannel serverShannel =(ServerSocketChannel) key.channel();
SocketChannel channel = serverShannel.accept();
channel.configureBlocking(false);
channel.register(selector, SelectionKey.OP_READ,ByteBuffer.allocate(1024));
public static void doRead(SelectionKey key,Selector selector) throws IOException
SocketChannel socketChannel = (SocketChannel) key.channel();
ByteBuffer buffer =(ByteBuffer) key.attachment();
buffer.clear();
int read = socketChannel.read(buffer);
int msg=buffer.getInt(0);
System.out.println("服务器收到客户端"+socketChannel.getLocalAddress()+" "+msg);
buffer.rewind();
buffer.putInt(msg+1);
buffer.flip();
socketChannel.write(buffer);
//buffer.clear();
客户端
public class Client
public static void main(String[] args)
try(SocketChannel channel=SocketChannel.open();
Selector selector=Selector.open();
)
channel.configureBlocking(false);
if(!channel.connect(new InetSocketAddress("127.0.0.1", 8881)))
while(!channel.finishConnect()) ;
System.out.println("连接到服务器");
ByteBuffer buffer = ByteBuffer.allocate(1024);
buffer.putInt(1);
buffer.flip();
channel.write(buffer);
channel.register(selector, SelectionKey.OP_READ,buffer);
for(;;)
selector.select();
Set<SelectionKey> keys = selector.selectedKeys();
Iterator<SelectionKey> iterator = keys.iterator();
while(iterator.hasNext())
SelectionKey next = iterator.next();
if(next.isReadable())
doRead(next,selector);
iterator.remove();
Thread.sleep(2000);
catch (IOException e)
// TODO Auto-generated catch block
e.printStackTrace();
catch (InterruptedException e)
// TODO Auto-generated catch block
e.printStackTrace();
public static void doRead(SelectionKey key,Selector selector) throws IOException
SocketChannel socketChannel = (SocketChannel) key.channel();
ByteBuffer buffer =(ByteBuffer) key.attachment();
buffer.clear();
socketChannel.read(buffer);
int msg=buffer.getInt(0);
System.out.println("客户端收到服务器返回的信息"+socketChannel.getLocalAddress()+" "+msg);
buffer.putInt(0,msg+1);
buffer.flip();
socketChannel.write(buffer);
以上是关于JAVA nio 简单使用的主要内容,如果未能解决你的问题,请参考以下文章