This class is the java.nio version of java.net.ServerSocket . It is a selectable channel that can be used by servers to accept connections from clients . Unlike other channel classes in this package, this class cannot be used for reading or writing bytes: it does not implement any of the ByteChannel interfaces, and exists only to accept and establish connections with clients, not to communicate with those clients. ServerSocketChannel differs from java.net.ServerSocket in two important ways: it can put into nonblocking mode and used with a Selector , and its accept( ) method returns a SocketChannel rather than a Socket , so that communication with the client whose connection was just accepted can be done using the java.nio APIs. Create a new ServerSocketChannel with the static open ( ) method. Next, call socket( ) to obtain the associated ServerSocket object, and use its bind( ) method to bind the server socket to a specific port on the local host. You can also call any other ServerSocket methods to configure other socket options at this point. To accept a new connection through this ServerSocketChannel , simply call accept( ) . If the channel is in blocking mode, this method will block until a client connects, and will then return a SocketChannel that is connected to the client. In nonblocking mode, (see the inherited configureBlocking( ) method) accept( ) returns a SocketChannel only if there is a client currently waiting to connect, and otherwise immediately returns null . To be notified when a client is waiting to connect, use the inherited register( ) method to register nonblocking a ServerSocketChannel with a Selector and specify an interest in accept operations with the SelectionKey.OP_ACCEPT constant. See Selector and SelectionKey for further details. Note that the SocketChannel object returned by the accept( ) method is always in nonblocking mode, regardless of the blocking mode of the ServerSocketChannel . ServerSocketChannel is thread-safe; only one thread may call the accept( ) method at a time. When a ServerSocketChannel is no longer required, close it with the inherited close( ) method. Figure 13-38. java.nio.channels.ServerSocketChannelpublic abstract class ServerSocketChannel extends java.nio.channels.spi. AbstractSelectableChannel { // Protected Constructors protected ServerSocketChannel (java.nio.channels.spi.SelectorProvider provider ); // Public Class Methods public static ServerSocketChannel open ( ) throws java.io.IOException; // Public Instance Methods public abstract SocketChannel accept ( ) throws java.io.IOException; public abstract java.net.ServerSocket socket ( ); // Public Methods Overriding SelectableChannel public final int validOps ( ); } Returned Byjava.net.ServerSocket.getChannel( ) , java.nio.channels.spi.SelectorProvider.openServerSocketChannel( ) |