【Java.NIO】API-Channelインタフェース-Server SocketChannelクラス

1702 ワード

java.nio.channels
public abstract class ServerSocketChann extends AbstractSelectableChannel implements NetworkChannel

ServerSocketChannelは、SelectableChannelからconfigureBlocking()メソッドとregister()メソッドを継承します.
ServerSocketChannelは、標準IOのServerSocketのように、新しく入ってきたTCP接続を監視できるチャネルです.
ServerSocketChannelにはpublicタイプのコンストラクションメソッドはありません.静的メソッドopen()でServerSocketChannelオブジェクトを作成する必要があります.各ServerSocketChannelオブジェクトは、1つのServerSocketオブジェクトに関連付けられています.ServerSocketChannelのsocket()メソッドは、彼に関連付けられたServerSocketオブジェクトを返します.サーバ・プロセスは、次の方法でローカル・ポートにバインドできます.
serverSocketChannel.socket().bind(port);

ServerSocketChannelの主な方法は次のとおりです.
  • open()-静的ファクトリメソッドは、ローカルポートにバインドされておらず、ブロックモード
  • にあるサーバSocketChannelオブジェクトを返します.
  • close()-ServerSocketChannel
  • を閉じる
  • accept()-サーバソケットと同様のaccept()メソッドで、お客様の接続を受け入れることができます.ServerSocketChannelが非ブロック状態の場合、クライアント接続がない場合、このメソッドはnullに戻ります.ServerSocketChannelがブロックされている場合、お客様の接続がない場合は、お客様の接続が完了するまでブロックされるか、IOException
  • が表示されます.
  • configureBlocking-ブロック/非ブロックモード
  • を設定
  • validOps()-ServerSocketChannelが生成できるイベントを返します.このメソッドは常にSelctionKeyを返します.OP_ACCEPT
  • socket()-サーバーSocketChannelに関連付けられたサーバーSocketオブジェクトを返します.各サーバーSocketChannelオブジェクトは、1つのサーバーSocketオブジェクトに関連付けられています.
  • 非ブロックモードの例:
    ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();
    
    serverSocketChannel.socket().bind(new InetSocketAddress(9999));
    serverSocketChannel.configureBlocking(false);
    
    while(true){
        SocketChannel socketChannel = serverSocketChannel.accept();
    
        if (socketChannel != null){
            // do something with socketChannel... ...
        }
    }