七、Nio之SocketChannel
阿新 • • 發佈:2019-01-24
Java NIO中的SocketChannel是一個連線到TCP網路套接字的通道。 可以通過以下2種方式建立SocketChannel:
1. 開啟一個 SocketChannel 並連線到網際網路上的某臺伺服器。
2. 一個新連線到達 ServerSocketChannel 時,會建立一個 SocketChannel。
開啟 SocketChannel
下面是 SocketChannel 的開啟方式:
非阻塞模式
可以設定 SocketChannel 為非阻塞模式(non-blocking mode).設定之後,就可以在非同步模式下呼叫 connect(),read() 和write()了。
connect()
如果 SocketChannel 在非阻塞模式下,此時呼叫 connect(),該方法可能在連線建立之前就返回了。為了確定連線
是否建立,可以呼叫 finishConnect()的方法。像這樣:
SocketChannel socketChannel =SocketChannel.open();
socketChannel.connect(newInetSocketAddress("127.0.0.1",80));
socketChannel.close();
ByteBuffer
int bytesRead = socketChannel.read(buf);
String
ByteBuffer buf =ByteBuffer.allocate(48);
buf.clear();
buf.put(newData.getBytes());
buf.flip();
while(buf.hasRemaining()){
channel.write(buf);
}
socketChannel.configureBlocking(false);
socketChannel.connect(newInetSocketAddress("127.0.0.1",80));
while(! socketChannel.finishConnect()){
//wait, or do something else...
}