一、ServerSocketChannelJava NIO中的 ServerSocketChannel 是一个可以监听新进来的tcp连接的通道, 就像标准io中的ServerSocket一样。ServerSocketChannel类在 ja
一、ServerSocketChannel
Java NIO中的 ServerSocketChannel 是一个可以监听新进来的tcp连接的通道, 就像标准io中的ServerSocket一样。ServerSocketChannel类在 java.nio.channels包中。
打开 ServerSocketChannel
通过调用 ServerSocketChannel.open() 方法来打开ServerSocketChannel.
关闭 ServerSocketChannel
通过调用ServerSocketChannel.close() 方法来关闭ServerSocketChannel.
监听新进来的连接
通过 ServerSocketChannel.accept() 方法监听新进来的连接。当 accept()方法返回的时候,它返回一个包含新进来的连接的 SocketChannel。因此, accept()方法会一直阻塞到有新连接到达。
通常不会仅仅只监听一个连接,在while循环中调用 accept()方法.
当然,也可以在while循环中使用除了true以外的其它退出准则。
非阻塞模式
ServerSocketChannel可以设置成非阻塞模式。在非阻塞模式下,accept() 方法会立刻返回,如果还没有新进来的连接,返回的将是null。 因此,需要检查返回的SocketChannel是否是null.如:
@Test public void text2() throws IOException { ServerSocketChannel channel = ServerSocketChannel.open(); //新建channel channel.socket().bind(new InetSocketAddress(9999)); //监听端口 channel.configureBlocking(true); //设置阻塞 while (true) { SocketChannel accept = channel.accept(); //设置为阻塞,则此方法阻塞,直到有连接 //如果设置为非阻塞,需要在这里判断 accept == null? ByteBuffer byteBuffer = ByteBuffer.allocate(1024); accept.read(byteBuffer); byteBuffer.flip(); //反转 while (byteBuffer.hasRemaining()) { //判断 System.err.println((char)byteBuffer.get()); //输出 } } }
--结束END--
本文标题: JAVA-NIO之Socket/ServerSocket Channel(详解)
本文链接: https://lsjlt.com/news/225568.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0