一个简单的NIO实例

public class TestNio {
public static void main(String[] args) throws IOException {
Selector selector = Selector.open();
ServerSocketChannel ssc = ServerSocketChannel.open();
ssc.socket().bind(new InetSocketAddress("192.168.27.48", 7777));
ssc.configureBlocking(false);
ssc.register(selector, SelectionKey.OP_ACCEPT);
while(true){
int n = selector.select();
if(n > 0){
Iterator<SelectionKey> ite = selector.selectedKeys().iterator();
while(ite.hasNext()){
SelectionKey k = ite.next();
ite.remove();
if(k.isAcceptable()){
SocketChannel s = ((ServerSocketChannel)k.channel()).accept();
s.configureBlocking(false);
System.out.println("accept:" + s.socket().getPort() + " s:" + s);
s.register(selector, SelectionKey.OP_WRITE);
}else if(k.isReadable()){
SocketChannel sc = (SocketChannel) k.channel();
ByteBuffer dst = ByteBuffer.allocate(1024);
sc.read(dst);
System.out.println("str:" + dst.toString());
sc.keyFor(selector).cancel();
sc.keyFor(selector).interestOps(SelectionKey.OP_WRITE);
}else if(k.isWritable()){
SocketChannel sc = (SocketChannel) k.channel();
ByteBuffer b = ByteBuffer.allocate(12);
b.put(new String("repaly").getBytes("utf-8"));
b.flip();
sc.write(b);
sc.keyFor(selector).interestOps(SelectionKey.OP_READ);
}
}
}
}
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值