1 SocketChannel
1.1 打开一个SocketChannel
SocketChannel socketChannel = SocketChannel.open();
socketChannel.connect(new InetSocketAddress("http://www.baidu.com", 80));
1.2 关闭一个SocketChannel
socketChannel.close();
1.3 读取一个SocketChannel
ByteBuffer buf = ByteBuffer.allocate(48);
int byteRead = socketChannel.read(buf);
2 ServerSocketChannel
2.1 ServerSocketChannel in blocking mode
ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();
serverSocketChannel.socket().bind(new InetSocketAddress(1111));
while(true) {
SocketChannel socketChannel = serverSocketChannel.accept();
// do something with socketChannel.......
}
2.2 ServerSocketChannel in non-blocking mode
ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();
serverSocketChannel.socket().bind(new InetSocketAddress(1111));
serverSocketChannel.configureBlocking(false);
while(true) {
SocketChannel socketChannel = serverSocketChannel.accept();
if (socketChannel != null)
{
// do something with socketChannel.......
}
}
在non-blocking mode时,没有人来connect的时候accept()就会直接返回。这也是non-blocking的意义所在,对于文件而言,总是可以读写的,不存在block一说,也就没有non-blocking mode了。