首页 > 代码库 > JAVA NIO
JAVA NIO
参考文章:
http://weixiaolu.iteye.com/blog/1479656
http://developer.51cto.com/art/201112/307463.htm
NIO服务端
package com.meso.nio;import java.io.IOException;import java.net.InetSocketAddress;import java.nio.ByteBuffer;import java.nio.channels.SelectionKey;import java.nio.channels.Selector;import java.nio.channels.ServerSocketChannel;import java.nio.channels.SocketChannel;import java.util.Iterator;public class NIOServer { private ServerSocketChannel serverChannel; private Selector selector; private int port; public NIOServer(int port) { this.port = port; } public void initServer() throws IOException { System.out.println("开始初始化服务端"); serverChannel = ServerSocketChannel.open(); serverChannel.configureBlocking(false); serverChannel.socket().bind(new InetSocketAddress(port)); selector = Selector.open(); serverChannel.register(selector, SelectionKey.OP_ACCEPT); System.out.println("服务端初始化完毕"); } public void listen() throws IOException { System.out.println("开始监听"); while (true) { int num = selector.select(); System.out.println("新事件数目:" + num); Iterator it = selector.selectedKeys().iterator(); while (it.hasNext()) { SelectionKey key = (SelectionKey) it.next(); it.remove(); if (key.isAcceptable()) { ServerSocketChannel server = (ServerSocketChannel) key .channel(); SocketChannel channel = server.accept(); channel.configureBlocking(false); channel.write(ByteBuffer.wrap(new String("向客户端发送了一条信息") .getBytes())); channel.register(this.selector, SelectionKey.OP_READ); } else if (key.isReadable()) { SocketChannel channel = (SocketChannel) key.channel(); ByteBuffer buffer = ByteBuffer.allocate(1024); buffer.clear(); channel.read(buffer); String msg = new String(buffer.array()).trim(); System.out.println("服务端收到信息:" + msg); buffer.flip(); channel.write(buffer); } } } } public void close() { if (selector != null) { try { selector.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if (serverChannel != null) { try { serverChannel.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } public static void main(String[] args) { NIOServer server = new NIOServer(9999); try { server.initServer(); server.listen(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { server.close(); } }}
NIO客户端
package com.meso.nio;import java.io.IOException;import java.net.InetSocketAddress;import java.nio.ByteBuffer;import java.nio.channels.SelectionKey;import java.nio.channels.Selector;import java.nio.channels.SocketChannel;import java.util.Iterator;public class NIOClient { private Selector selector; private SocketChannel channel; private String ip; private int port; public NIOClient(String ip, int port) { this.ip = ip; this.port = port; } public void initClient() throws IOException { System.out.println("客户端开始初始化"); channel = SocketChannel.open(); channel.configureBlocking(false); this.selector = Selector.open(); channel.connect(new InetSocketAddress(ip, port)); channel.register(selector, SelectionKey.OP_CONNECT); System.out.println("客户端初始化完毕"); } public void listen() throws IOException { System.out.println("开始监听"); while (true) { int num = selector.select(); System.out.println("新事件数目:" + num); Iterator ite = this.selector.selectedKeys().iterator(); while (ite.hasNext()) { SelectionKey key = (SelectionKey) ite.next(); ite.remove(); if (key.isConnectable()) { SocketChannel channel = (SocketChannel) key.channel(); if (channel.isConnectionPending()) { channel.finishConnect(); } channel.configureBlocking(false); channel.write(ByteBuffer.wrap(new String("向服务端发送了一条信息") .getBytes())); channel.register(this.selector, SelectionKey.OP_READ); } else if (key.isReadable()) { SocketChannel channel = (SocketChannel) key.channel(); ByteBuffer buffer = ByteBuffer.allocate(100); buffer.clear(); channel.read(buffer); String msg = new String(buffer.array()).trim(); System.out.println("客户端收到信息:" + msg); buffer.flip(); channel.write(buffer); } } } } public void close() { if (selector != null) { try { selector.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if (channel != null) { try { channel.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } public static void main(String[] args) { NIOClient client = new NIOClient("localhost", 9999); try { client.initClient(); client.listen(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { client.close(); } }}
JAVA NIO
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。