import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel;
import java.nio.channels.Selector;
import java.nio.channels.SelectionKey;
import java.nio.channels.SelectableChannel;
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
import java.nio.charset.CharsetEncoder;
import java.net.InetAddress;
import java.net.Socket;
import java.net.ServerSocket;
import java.net.InetSocketAddress;
import java.util.*;
import java.util.Date;
import java.util.Iterator;
public class MyServer {
SocketChannel sc;
ServerSocketChannel ssc;
Selector selector;
private static Charset charset = Charset.forName("US-ASCII");
private static CharsetEncoder encoder = charset.newEncoder();
private static CharsetDecoder decoder = charset.newDecoder();
ByteBuffer br = ByteBuffer.allocate(1024);
MyServer() {
try {
InetSocketAddress addr = new InetSocketAddress(InetAddress
.getLocalHost(), 26);
ssc = ServerSocketChannel.open();
ssc.configureBlocking(false);
ServerSocket ss = ssc.socket();
ss.bind(addr);
System.out.println("asdf");
selector = Selector.open();
ssc.register(selector, SelectionKey.OP_ACCEPT);
while (true) {
if (selector.select() > 0) {
System.out.println("asdf");
Set readyKeys = selector.selectedKeys();
Iterator it = readyKeys.iterator();
while (it.hasNext()) {
SelectionKey sk = (SelectionKey) it.next();
it.remove();
if (sk.isAcceptable()) {
sc = ssc.accept();
sc.read(br);
br.flip();
CharBuffer cb = decoder.decode(br);
System.out.print(" : " + cb);
sc.configureBlocking(false);
sk=sc.register(selector,0);
sk.interestOps(SelectionKey.OP_WRITE);
System.out.println("isaccept()");
//selector.wakeup();
}
if(sk.isReadable()){
sc.read(br);
br.flip();
CharBuffer cb = decoder.decode(br);
System.out.print("is readable : " + cb);
sk.interestOps(SelectionKey.OP_WRITE);
System.out.println("set write");
//selector.wakeup();
}
if(sk.isWritable()){
String now = new Date().toString();
sc.write(encoder.encode(CharBuffer.wrap("write"+now +
"/r/n")));
System.out.println(sc.socket().getInetAddress() +
" : " + now);
sk.interestOps(SelectionKey.OP_READ);
// selector.wakeup();
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
sc.close();
ssc.close();
} catch (Exception e) {
}
}
}
public static void main(String args[]) {
new MyServer();
}
}
import java.nio.channels.SocketChannel;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.channels.Selector;
import java.nio.channels.SelectionKey;
import java.util.*;
import java.util.Date;
import java.nio.charset.*;
import java.io.IOException;
public class MyClient {
SocketChannel sc;
Selector selector;
private final int MAX_LENGTH = 1024;
// private static Charset charset = Charset.forName("US-ASCII");
private static Charset charset = Charset.forName("US-ASCII");
private static CharsetDecoder decoder = charset.newDecoder();
private static CharsetEncoder encoder = charset.newEncoder();
private ByteBuffer r_buff = ByteBuffer.allocate(MAX_LENGTH);
public MyClient() {
try {
InetSocketAddress addr = new InetSocketAddress(InetAddress
.getLocalHost(), 26);
sc = SocketChannel.open();
sc.configureBlocking(false);
sc.connect(addr);
selector=Selector.open();
sc.register(selector,SelectionKey.OP_CONNECT);
System.out.println("register(selector, SelectionKey.OP_CONNECT");
while (true) {
int n=selector.select(30);
//System.out.println("elector.select(30)="+n);
if (n> 0) {
Set set = selector.selectedKeys();
Iterator it = set.iterator();
while (it.hasNext()) {
System.out.println("it.hasNext()");
SelectionKey sk = (SelectionKey) it.next();
it.remove();
set.clear();
if (sk.isConnectable()) {
if(sc.isConnectionPending()){
sc.finishConnect();
}
System.out.println("4");
r_buff.clear();
// sc.read(r_buff);
String now = new Date().toString();
sc.write(encoder.encode(CharBuffer.wrap(now
+ "/r/n")));
// r_buff.flip();
// CharBuffer cb = decoder.decode(r_buff);
// System.out.print(" : " + cb);
sc.register(selector,SelectionKey.OP_READ);
}
if(sk.isReadable()){
sc.read(r_buff);
r_buff.flip();
CharBuffer cb = decoder.decode(r_buff);
System.out.print(" : " + cb);
sc.register(selector,SelectionKey.OP_WRITE);
}
if(sk.isWritable()){
r_buff.clear();
// sc.read(r_buff);
String now = new Date().toString();
sc.write(encoder.encode(CharBuffer.wrap(now
+ "/r/n")));
// r_buff.flip();
// CharBuffer cb = decoder.decode(r_buff);
// System.out.print(" : " + cb);
sc.register(selector,SelectionKey.OP_READ);
}
}
}
}
} catch (IOException ioe) {
ioe.printStackTrace();
} finally {
try {
sc.close();
} catch (IOException ioe) {
System.err.println("finally sth. is wrong with br.readline() ");
}
}
}
public static void main(String args[]) {
new MyClient();
}
}
/*
public MyClient() {
try {
InetSocketAddress addr = new InetSocketAddress(InetAddress
.getLocalHost(), 26);
sc = SocketChannel.open();
sc.configureBlocking(false);
sc.connect(addr);
if (sc.finishConnect()) {
System.out.println("connection has been established!...");
}
r_buff.clear();
// sc.read(r_buff);
String now = new Date().toString();
sc.write(encoder.encode(CharBuffer.wrap(now
+ "/r/n")));
selector=Selector.open();
SelectionKey skey = sc.register(selector,0 );
skey.interestOps(SelectionKey.OP_CONNECT);
System.out.println("register(selector, SelectionKey.OP_CONNECT");
while (true) {
System.out.println(selector.select());
if (selector.select(50000) > 0) {
System.out.println("selector.select(30) > 0");
Set set = selector.selectedKeys();
Iterator it = set.iterator();
if (it.hasNext()) {
System.out.println("it.hasNext()");
SelectionKey sk = (SelectionKey) it.next();
if (sk.isConnectable()) {
System.out.println("4");
r_buff.clear();
// sc.read(r_buff);
now = new Date().toString();
sc.write(encoder.encode(CharBuffer.wrap(now
+ "/r/n")));
// r_buff.flip();
// CharBuffer cb = decoder.decode(r_buff);
// System.out.print(" : " + cb);
sc.register(selector,SelectionKey.OP_READ);
selector.wakeup();
}
}
}
}
} catch (IOException ioe) {
System.err.println("sth. is wrong with br.readline() ");
} finally {
try {
sc.close();
} catch (IOException ioe) {
System.err.println("finally sth. is wrong with br.readline() ");
}
}
}
*/