当前位置: 首页 > news >正文

Java NIO(十) ServerSocketChannel

Java NIO ServerSocketChannel是一个可以侦听传入TCP连接的通道,就像标准Java Networking中的ServerSocket一样。 ServerSocketChannel类位于java.nio.channels包中。 这是一个例子:

ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();

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

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

    //do something with socketChannel...
}
复制代码

###Opening a ServerSocketChannel 通过调用ServerSocketChannel.open()方法打开一个ServerSocketChannel。 这是如何看起来如此:

ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();
复制代码

###Closing a ServerSocketChannel 关闭ServerSocketChannel是通过调用ServerSocketChannel.close()方法完成的。 这是如何看起来如此:

serverSocketChannel.close(); ###监听传入的连接 监听传入的连接是通过调用ServerSocketChannel.accept()方法完成的。 accept()方法返回时,它将返回一个带有传入连接的SocketChannel。 因此,accept()方法阻塞,直到传入的连接到达。

由于您通常不希望只听一个连接,所以您可以在while循环中调用accept()。 这是如何看起来如此:

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

    //do something with socketChannel...
}
复制代码

当然,你会在while循环中使用其他的停止标准。 ###非阻塞模式 ServerSocketChannel可以设置为非阻塞模式。 在非阻塞模式下,accept()方法立即返回,如果没有到达连接,可能会返回null。 因此,您将不得不检查返回的SocketChannel是否为空。 这里是一个例子:

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...
        }
}
复制代码

相关文章:

  • Cisco路由器进行ip限速
  • Android Runtime Stats
  • pair work结束
  • springboot定制启动标志
  • Windows2000/XP启动过程详解
  • slf4j-logback 日志以json格式导入ELK
  • jquery 笔记。。。——》摘自武方博
  • Linux导入导出Oracle数据库
  • 谈谈这些年来我为什么一直在坚持
  • 3171. [TJOI2013]循环格【费用流】
  • Android OTG之USB转串口模块通讯
  • 扑克千术
  • 删除数据库中所有表
  • 初来乍到
  • .NET成年了,然后呢?
  • Java方法详解
  • Java知识点总结(JavaIO-打印流)
  • mysql中InnoDB引擎中页的概念
  • Octave 入门
  • Python爬虫--- 1.3 BS4库的解析器
  • SpringBoot几种定时任务的实现方式
  • ubuntu 下nginx安装 并支持https协议
  • 大整数乘法-表格法
  • 官方解决所有 npm 全局安装权限问题
  • 老板让我十分钟上手nx-admin
  • 力扣(LeetCode)21
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 时间复杂度与空间复杂度分析
  • 线性表及其算法(java实现)
  • 在Mac OS X上安装 Ruby运行环境
  • ionic异常记录
  • ​学习一下,什么是预包装食品?​
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • (4)事件处理——(7)简单事件(Simple events)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (TOJ2804)Even? Odd?
  • (动手学习深度学习)第13章 计算机视觉---图像增广与微调
  • (读书笔记)Javascript高级程序设计---ECMAScript基础
  • (二)构建dubbo分布式平台-平台功能导图
  • (附源码)ssm基于web技术的医务志愿者管理系统 毕业设计 100910
  • (免费领源码)python#django#mysql校园校园宿舍管理系统84831-计算机毕业设计项目选题推荐
  • (删)Java线程同步实现一:synchronzied和wait()/notify()
  • (顺序)容器的好伴侣 --- 容器适配器
  • (四)模仿学习-完成后台管理页面查询
  • (转)socket Aio demo
  • .NET Core 和 .NET Framework 中的 MEF2
  • .NET Framework 的 bug?try-catch-when 中如果 when 语句抛出异常,程序将彻底崩溃
  • .net Stream篇(六)
  • .NET单元测试
  • .NET实现之(自动更新)
  • .NET委托:一个关于C#的睡前故事
  • .NET中的十进制浮点类型,徐汇区网站设计
  • .net最好用的JSON类Newtonsoft.Json获取多级数据SelectToken
  • @SuppressLint(NewApi)和@TargetApi()的区别
  • [ 环境搭建篇 ] 安装 java 环境并配置环境变量(附 JDK1.8 安装包)