package com.ronsoft.books.nio.channels;
import java.nio.ByteBuffer;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel;
import java.net.InetSocketAddress;
/**
* Test non-blocking accept() using ServerSocketChannel.
* Create and bind a ServerSocketChannel, then place the
* channel in non-blocking mode. Loop infinitely, sleeping
* two seconds between checks for incoming connections.
* Rather than sleeping, the thread could be doing something
* useful. When a connection comes in, send a greeting down
* the channel then close it.
* Start this program, then "telnet localhost 1234" to connect
* to it.
*
* Created April 2002
* @author Ron Hitchens (ron@ronsoft.com)
* @version $Id: ChannelAccept.java,v 1.1 2002/04/28 01:47:58 ron Exp $
*/
public class ChannelAccept
{
public static final String GREETING = "Hello I must be going.\r\n";
public static void main (String [] argv)
throws Exception
{
int port = 1234; // default
if (argv.length > 0) {
port = Integer.parseInt (argv [0]);
}
ByteBuffer buffer = ByteBuffer.wrap (GREETING.getBytes());
ServerSocketChannel ssc = ServerSocketChannel.open();
ssc.socket().bind (new InetSocketAddress (port));
ssc.configureBlocking (false);
while (true) {
System.out.println ("Waiting for connections");
SocketChannel sc = ssc.accept();
if (sc == null) {
// no connections, snooze a while
Thread.sleep (2000);
} else {
System.out.println ("Incoming connection from: "
+ sc.socket().getRemoteSocketAddress());
buffer.rewind();
sc.write (buffer);
sc.close();
}
}
}
}
|