package com.deepnighttwo.nioserver;
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.Set;
public class NIOServer {
public static final int PORT = 19191;
ByteBuffer bb = ByteBuffer.allocate(1024);
public NIOServer() {
Thread th = new Thread() {
public void run() {
try {
startServer();
} catch (Exception e) {
e.printStackTrace();
}
}
};
th.start();
}
public void startServer() throws Exception {
Selector s = Selector.open();
ServerSocketChannel ssc = ServerSocketChannel.open();
ssc.configureBlocking(false);
ssc.register(s, SelectionKey.OP_ACCEPT);
ssc.socket().bind(new InetSocketAddress(PORT));
log("System initialized");
while (true) {
if (s.select() <= 0) {
continue;
}
Set<SelectionKey> keys = s.selectedKeys();
for (SelectionKey key : keys) {
if (key.isAcceptable() == true) {
SocketChannel sc = ssc.accept();
sc.configureBlocking(false);
log("Connected from client: "
+ sc.socket().getRemoteSocketAddress());
sc.register(s, SelectionKey.OP_READ);
}
if (key.isReadable()) {
bb.clear();
SocketChannel sc = (SocketChannel) key.channel();
sc.read(bb);
bb.flip();
byte[] data = new byte[bb.remaining()];
bb.get(data);
String msg = new String(data);
log("Message from client: " + msg);
}
}
keys.clear();
}
}
public void log(Object obj) {
System.out.println(obj);
}
public static void main(String[] args) {
new NIOServer();
}
}