01: //********* Non-blocking client *************************************** 02: import java.nio.ByteBuffer; 03: import java.nio.channels.SocketChannel; 04: import java.net.InetSocketAddress; 05: 06: public class NBC { // NonBlockingClient 07: public static void main(String[ ] args) throws Exception { 08: if (args.length < 1) { 09: System.err.println("Usage: NBC <server's addr>"); 10: return; 11: } 12: // Create a ByteBuffer to receive data. 13: ByteBuffer buff = ByteBuffer.allocate(buff_size); 14: 15: // Open a socket channel and configure it as blocking. 16: SocketChannel sc = SocketChannel.open(); 17: sc.configureBlocking(false); 18: 19: // Attempt to connect: as blocking is off, the connect 20: // call returns at once 21: sc.connect(new InetSocketAddress(args[0], port)); 22: 23: // Now wait until the connection is finished. 24: // (There's a better way.) 25: while (!sc.finishConnect()) 26: Thread.sleep(500); 27: 28: // Read from the channel when data are available. 29: // (There's a better way.) 30: while (sc.read(buff) != -1) // -1 marks end of stream 31: Thread.sleep(500); 32: sc.close(); 33: System.out.println(new String(buff.array())); 34: } 35: private static final int port = 2233; 36: private static final int buff_size = 512; // in bytes 37: }