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了。

05-11 15:39
查看更多