Java NIO的ServerSocketChannel是用来监听外来TCP连接的channel,就想标准Java网络中的ServerSocket。实比例如以下:
ServerSocketChannel serverSocketChannel = ServerSocketChannel.open(); serverSocketChannel.socket().bind(new InetSocketAddress(8090)); while(true) { SocketChannel socketChannel = serverSocketChannel.accept(); }
打开一个ServerSocketChannel
通过open方法打开
ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();
关闭ServerSocketChannel
通过close方法
监听外来连接
监听外来连接通过调用accept方法,当accept方法返回,将返回一个连接的SocketChannel。
所以accept方法会堵塞直到有连接。
因为普通情况对单个连接没有监听的兴趣,你能够在循环内调用accept方法。
while(true) { SocketChannel socketChannel = serverSocketChannel.accept(); }当然。你应该使用一些退出循环的条件。而不是true。
非堵塞模式
ServerSocketChannel能设置成非堵塞模式,在非堵塞模式下。accept方法马上返回。有可能返回null(假设没有连接建立)。
因此你必须检查返回的SocketChannel是不是null。例如以下:
while(true) { SocketChannel socketChannel = serverSocketChannel.accept(); if(socketChannel!=null) { } }
下一节:【JAVA】【NIO】11、Java NIO DatagramChannel