Java Reference
In-Depth Information
}
System . out . println ( "Listening for connections on port " + port );
ServerSocketChannel serverChannel ;
Selector selector ;
try {
serverChannel = ServerSocketChannel . open ();
ServerSocket ss = serverChannel . socket ();
InetSocketAddress address = new InetSocketAddress ( port );
ss . bind ( address );
serverChannel . configureBlocking ( false );
selector = Selector . open ();
serverChannel . register ( selector , SelectionKey . OP_ACCEPT );
} catch ( IOException ex ) {
ex . printStackTrace ();
return ;
}
while ( true ) {
try {
selector . select ();
} catch ( IOException ex ) {
ex . printStackTrace ();
break ;
}
Set < SelectionKey > readyKeys = selector . selectedKeys ();
Iterator < SelectionKey > iterator = readyKeys . iterator ();
while ( iterator . hasNext ()) {
SelectionKey key = iterator . next ();
iterator . remove ();
try {
if ( key . isAcceptable ()) {
ServerSocketChannel server = ( ServerSocketChannel ) key . channel ();
SocketChannel client = server . accept ();
System . out . println ( "Accepted connection from " + client );
client . configureBlocking ( false );
SelectionKey clientKey = client . register (
selector , SelectionKey . OP_WRITE | SelectionKey . OP_READ );
ByteBuffer buffer = ByteBuffer . allocate ( 100 );
clientKey . attach ( buffer );
}
if ( key . isReadable ()) {
SocketChannel client = ( SocketChannel ) key . channel ();
ByteBuffer output = ( ByteBuffer ) key . attachment ();
client . read ( output );
}
if ( key . isWritable ()) {
SocketChannel client = ( SocketChannel ) key . channel ();
ByteBuffer output = ( ByteBuffer ) key . attachment ();
output . flip ();
client . write ( output );
Search WWH ::




Custom Search