专栏首页醉程序Java NIO 系列学习 10 - ServerSocketChannel

Java NIO 系列学习 10 - ServerSocketChannel

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

举个例子:

ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();
serverSocketChannel.socket().bind(new InetSocketAddress(9999));

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

打开 ServerSocketChannel

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

ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();

关闭 ServerSocketChannel

ServerSocketChannel.close()

监听 传入连接

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

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

别忘了跳出循环…

非阻塞模式

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

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Java NIO 系列学习 09 - SocketChannel

    Java NIO SocketChannel 是一个连接TCP网络socket的channel。与标准库的网络Socket是等效的。有两个办法可以来建立Sock...

    许杨淼淼
  • CentOS7 firewall防火墙常用操作

    firewalld: 动态防火墙后台程序 firewall-config: 图形化的配置工具 firewall-cmd: 命令行客户端

    许杨淼淼
  • mktorrent 制作私人种子 & Deluge 做种

    在 Windows OS 上,可以比较方便的使用qBittorrent等软件来制作和发布种子。 怎么在(无GUI)服务器上制作并发布一个种子呢? mktor...

    许杨淼淼
  • Java NIO-9.ServerSocketChannel

    Java NIO ServerSocketChannel是一个能够监听新进TCP连接的通道,就像标准Java网络连接中的ServerSocket。ServerS...

    悠扬前奏
  • 【Java SE】Java NIO系列教程(九) ServerSocketChannel

    英文:Jakob Jenkov 译文:ifeve - 郑玉婷 链接:http://ifeve.com/server-socket-channel/ Java N...

    用户1257215
  • 使用Lambda和API网关在Java中开发RESTful微服务

    原题:Developing RESTful APIs in Java using Amazon APIGateway and AWS Lambda

    yuanyi928
  • Java NIO

    0 <= mark <= position <= limit <= capacity

    张申傲
  • Netty之JavaNIO编程模型介绍02

      NIO 非阻塞 网络编程相关的(Selector、SelectionKey、ServerScoketChannel和SocketChannel) 关系梳理图

    用户4919348
  • DPI深度报文检测架构及关键技术实现

    当前DPI(Deep Packet Inspect深度报文识别)技术是安全领域的关键技术点之一,围绕DPI技术衍生出的安全产品类型也非常的多样。在分析DPI的进...

    SDNLAB
  • 7个角度进行nginx性能优化

    在大多数情况下,一个常规安装的Nginx对网站来说已经能很好地工作了。然而如果想挤压出Nginx的性能,就需要了解哪些指令会影响Nginx性能,在本文中将解释N...

    后端技术探索

扫码关注云+社区

领取腾讯云代金券