package player.kent.chen.temp.learnnio.socket; import java.io.IOException; import java.net.InetSocketAddress; import java.nio.ByteBuffer; import java.nio.channels.ServerSocketChannel; import java.nio.channels.SocketChannel; public class PlayServerSocketChannel { public static void main(String[] args) throws IOException, InterruptedException { ServerSocketChannel ssc = ServerSocketChannel.open(); ssc.socket().bind(new InetSocketAddress(17547)); ssc.configureBlocking(false); System.out.println("开始侦听连接..."); while (true) { SocketChannel sc = ssc.accept(); if (sc == null) {//非阻塞模式下,如果没有连接,accept()方法不会阻塞,而是直接返回null Thread.sleep(2000); } else { System.out.println("进来了一个连接。来自:" + sc.socket().getRemoteSocketAddress()); sc.write(ByteBuffer.wrap("尊姓大名: \n".getBytes())); //向客户端要求输入 //读入客户端的输入 ByteBuffer inputBuffer = ByteBuffer.allocate(10); sc.read(inputBuffer); inputBuffer.flip(); String clientName = new String(inputBuffer.array()); sc.write(ByteBuffer.wrap(("幸会," + clientName).getBytes())); //问候客户端 sc.write(ByteBuffer.wrap(("\n再见").getBytes())); sc.close(); //断开连接 } } } }