10 Java NIO ServerSocketChannel-翻譯

Java NIO ServerSocketChannel是一個監聽TCP鏈接的Channel,如Java 標準網絡中的ServerSocket。ServerSocketChannel類是在java.nio.channels包下。java

下面是一個例子:bash

ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();
serverSocketChannel.socket.bind(new InetAddress(9990));

while(true){
    SocketChannel socketChannel = serverSocketChannle.accept();
    // do something with socketChannel
}
複製代碼

Opening a ServerSocketChannel

能夠經過ServerSocketChannel的open方法來打開ServerSocketChannel。以下所示:網絡

ServerSocketChannel serverSocketChannel =  ServerSocketChannel.open();
複製代碼

Closing a ServerSocketChannel

關閉ServerSocketChannel能夠經過ServerSocketChannel的close()方法來實現。以下所示: serverSocketChannel.close();socket

Listening for Incoming Connections

能夠經過ServerSocketChannel的accept()來監聽新進來的鏈接。當accept()方法返回時,它將返回SocketChannel對象。所以,accept()方法會阻塞直接有新的鏈接進來。spa

一般不會僅僅只監聽一個鏈接,在while循環中調用 accept()方法. 以下面的例子:code

while(true){
    SocketChannel socketChannel =
            serverSocketChannel.accept();

    //do something with socketChannel...
}
複製代碼

固然也能夠在while循環中使用除了true之外的其餘條件。server

Non-blocking Mode

一個ServerSocketChannel能夠被設置工做在非阻塞模式。在非阻塞模式中,accept()方法會當即返回。所以它可能會返回null若是沒有新的鏈接進來。所以,你必須檢查返回的SocketChannel對象是否爲null。對象

ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();
serverSocketChannel.socket().bind(new InetSocketAddress(9990));
serverSocketChannel.configureBlocking(false);

while(true){
    SocketChannel socketChannel = serverSocketChannel.accept();
    if(seocketChannle != null){
        // do something with socketChannel...
    }
}
複製代碼
相關文章
相關標籤/搜索