?
class="java" name="code">public class Dispacther implements Runnable{ private String host = "127.0.0.1"; private int port = 8080; public final Selector selector; public final ServerSocketChannel serverSocketChannel; public Dispacther() throws IOException { selector=Selector.open(); serverSocketChannel=ServerSocketChannel.open(); InetSocketAddress inetSocketAddress=new InetSocketAddress(this.host,this.port); serverSocketChannel.socket().bind(inetSocketAddress); serverSocketChannel.configureBlocking(false); SelectionKey selectionKey=serverSocketChannel.register(selector, SelectionKey.OP_ACCEPT); selectionKey.attach(new Acceptor(this)); } @Override public void run() { try { while(!Thread.interrupted()){ selector.select(); Set<SelectionKey> selectionKeys= selector.selectedKeys(); Iterator<SelectionKey> it=selectionKeys.iterator(); while(it.hasNext()){ SelectionKey selectionKey=it.next(); dispatch(selectionKey); selectionKeys.clear(); } } } catch (IOException e) { e.printStackTrace(); } } void dispatch(SelectionKey key) { Runnable r = (Runnable)(key.attachment()); if (r != null){ r.run(); } } }
?
?
?
public class Acceptor implements Runnable{ private Dispacther dispacther; public Acceptor(Dispacther dispacther) { this.dispacther = dispacther; } @Override public void run() { try { SocketChannel socketChannel=dispacther.serverSocketChannel.accept(); if(socketChannel!=null) new SocketHandler(dispacther.selector, socketChannel); } catch (IOException e) { e.printStackTrace(); } } }
?
?
public class SocketHandler implements Runnable { private SocketChannel socketChannel; private Charset charset = Charset.forName("UTF-8"); private Selector selector; public SocketHandler(Selector selector,SocketChannel socketChannel) throws IOException{ this.socketChannel=socketChannel; this.selector = selector; socketChannel.configureBlocking(false); SelectionKey selectionKey=socketChannel.register(selector, 0); selectionKey.attach(this); selectionKey.interestOps(SelectionKey.OP_READ); selector.wakeup(); } @Override public void run() { try { ByteBuffer buff = ByteBuffer.allocate(1024); String content = ""; while (socketChannel.read(buff) > 0) { socketChannel.read(buff); buff.flip(); content += charset.decode(buff); } if(!"".equals(content)){ System.out.println( " content : " + content); for (SelectionKey key : this.selector.keys()) { Channel targetChannel = key.channel(); if (targetChannel instanceof SocketChannel) { SocketChannel dest = (SocketChannel) targetChannel; dest.write(charset.encode(content)); dest.close(); } } } } catch (IOException e) { e.printStackTrace(); } } }
?
?
?
?
?
?
?
?
?
?
?
?
?
在兴趣的驱动下,写一个免费
的东西,有欣喜,也还有汗水,希望你喜欢我的作品,同时也能支持一下。 当然,有钱捧个钱场(支持支付宝和微信 以及扣扣群),没钱捧个人场,谢谢各位。
?
个人主页:http://knight-black-bob.iteye.com/
?
?
?谢谢您的赞助,我会做的更好!