前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java NIO 系列学习 10 - ServerSocketChannel

Java NIO 系列学习 10 - ServerSocketChannel

作者头像
许杨淼淼
发布2019-12-29 20:02:33
6640
发布2019-12-29 20:02:33
举报
文章被收录于专栏:醉程序醉程序

ServerSocketChannel 可以监听传入的TCP连接,与Java标准库的ServerSocket类似。

举个例子:

代码语言:javascript
复制
ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();
serverSocketChannel.socket().bind(new InetSocketAddress(9999));

while(true){
    SocketChannel socketChannel = serverSocketChannel.accept();
    //do something with socketChannel...
}

打开 ServerSocketChannel

通过调用ServerSocketChannel.open()方法来打开ServerSocketChannel

代码语言:javascript
复制
ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();

关闭 ServerSocketChannel

代码语言:javascript
复制
ServerSocketChannel.close()

监听 传入连接

通过调用ServerSocketChannel.accept()方法来监听传入连接。当accept()方法返回结果时,返回的是一个有传入连接的SocketChannel,因此此方法是阻塞的,会一直阻塞直到有连接传入。 一般循环调用此方法:

代码语言:javascript
复制
while(true){
    SocketChannel socketChannel = serverSocketChannel.accept();
		// todo
}

别忘了跳出循环…

非阻塞模式

ServerSocketChannel 也是可以被置为非阻塞模式的。在非阻塞模式下,accept()会立即返回,因此如果没有传入连接时可能返回null。所以需要检测是否返回的是null。

代码语言:javascript
复制
ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();

serverSocketChannel.socket().bind(new InetSocketAddress(9999));
serverSocketChannel.configureBlocking(false);

while(true){
    SocketChannel socketChannel = serverSocketChannel.accept();

    if(socketChannel != null){
        //do something with socketChannel...
    }
}

参考

  1. Java NIO ServerSocketChannel
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年5月16日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 打开 ServerSocketChannel
  • 关闭 ServerSocketChannel
  • 监听 传入连接
  • 非阻塞模式
  • 参考
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档