?
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/



?
?
?谢谢您的赞助,我会做的更好!