クライアントとサーバーのロジックが混在していると思います。サーバーがクライアントのように動作するかどうかを検討する必要があります。でも大丈夫...
まず、エントリ ポイントとしてのいくつかの Java クラス
抽象セレクター
SocketChannel
次のような新しいセレクターを作成できます
// Create a new selector
Selector socketSelector = SelectorProvider.provider().openSelector();
// Create a new non-blocking server socket channel
mServerChannel = ServerSocketChannel.open();
mServerChannel.configureBlocking(false);
// Bind the server socket to the specified address and port
InetSocketAddress isa = new InetSocketAddress(mHostAddress, mPort);
mServerChannel.socket().bind(isa);
// Register the server socket channel, indicating an interest in
// accepting new connections
mServerChannel.register(socketSelector, SelectionKey.OP_ACCEPT);
Selector は、クライアント接続の着信を待機できます
// Wait for an event one of the registered channels
mSelector.select();
新しいクライアントが接続された後、AbstractSelector を使用してクライアントに応答を送信できます。
socketChannel.write(buf);
コード例:
http://rox-xmlrpc.sourceforge.net/niotut/