`
zfwdl2005
  • 浏览: 237565 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

nio server

阅读更多

public class NBTest {


  /** Creates new NBTest */
  public NBTest()
  {
  }

  public void startServer() throws Exception
  {
  int channels = 0;
  int nKeys = 0;
  int currentSelector = 0;

  //使用Selector
  Selector selector = Selector.open();

  //建立Channel 并绑定到9000端口
  ServerSocketChannel ssc = ServerSocketChannel.open();
  InetSocketAddress address = new InetSocketAddress(InetAddress.getLocalHost(),9000);
  ssc.socket().bind(address);

  //使设定non-blocking的方式。
  ssc.configureBlocking(false);

  //向Selector注册Channel及我们有兴趣的事件
  SelectionKey s = ssc.register(selector, SelectionKey.OP_ACCEPT);
  printKeyInfo(s);

  while(true) //不断的轮询
  {
    debug("NBTest: Starting select");

    //Selector通过select方法通知我们我们感兴趣的事件发生了。
    nKeys = selector.select();
    //如果有我们注册的事情发生了,它的传回值就会大于0
    if(nKeys > 0)
    {
      debug("NBTest: Number of keys after select operation: " +nKeys);

      //Selector传回一组SelectionKeys
      //我们从这些key中的channel()方法中取得我们刚刚注册的channel。
      Set selectedKeys = selector.selectedKeys();
      Iterator i = selectedKeys.iterator();
      while(i.hasNext())
      {
         s = (SelectionKey) i.next();
         printKeyInfo(s);
         debug("NBTest: Nr Keys in selector: " +selector.keys().size());

         //一个key被处理完成后,就都被从就绪关键字(ready keys)列表中除去
         i.remove();
         if(s.isAcceptable())
         {
           // 从channel()中取得我们刚刚注册的channel。
           Socket socket = ((ServerSocketChannel)s.channel()).accept().socket();
           SocketChannel sc = socket.getChannel();

           sc.configureBlocking(false);
           sc.register(selector, SelectionKey.OP_READ |SelectionKey.OP_WRITE);
                      System.out.println(++channels);
         }
         else
         {
           debug("NBTest: Channel not acceptable");
         }
      }
   }
   else
   {
      debug("NBTest: Select finished without any keys.");
   }

  }

}


private static void debug(String s)
{
  System.out.println(s);
}


private static void printKeyInfo(SelectionKey sk)
{
  String s = new String();

  s = "Att: " + (sk.attachment() == null ? "no" : "yes");
  s += ", Read: " + sk.isReadable();
  s += ", Acpt: " + sk.isAcceptable();
  s += ", Cnct: " + sk.isConnectable();
  s += ", Wrt: " + sk.isWritable();
  s += ", Valid: " + sk.isValid();
  s += ", Ops: " + sk.interestOps();
  debug(s);
}


/**
* @param args the command line arguments
*/
public static void main (String args[])
{
  NBTest nbTest = new NBTest();
  try
  {
    nbTest.startServer();
  }
    catch(Exception e)
  {
    e.printStackTrace();
  }
}

}

分享到:
评论

相关推荐

    NIOServer

    【标题】:“NIOServer”是一个关于网络编程的Java实现,它使用了Java的非阻塞I/O(Non-blocking I/O,NIO)技术。在Java中,NIO是一种替代传统阻塞I/O(BIO)模型的方式,提供了更高效的数据传输能力。此项目可能是...

    NioServer.java

    NioServer.java

    nioserver.zip_NIO_event driven java_java nio_java nioserv_nioser

    标题中的“nioserver.zip_NIO_event driven java_java nio_java nioserv_nioser”表明这是一个关于Java NIO的服务器实现,且是基于事件驱动模式的。事件驱动编程是一种设计模式,它允许程序对特定事件做出响应,而...

    nioserver.zip

    同时整个服务端的流程处理,建立于事件机制上。在 [接受连接->读->业务处理->写 ->关闭连接 ]这个 过程中,触发器将触发相应事件,由事件处理器对相应事件分别响应,完成服务器端的业务处理。...

    nioserver.rar_NIO_java nio

    NIO(Non-blocking Input/Output)是Java编程语言中的一种I/O模型,它与传统的阻塞I/O(BIO)模型相比,具有更高的性能和更灵活的架构。NIO在Java 1.4版本中引入,全称为New Input/Output,它的核心在于“非阻塞”二...

    nioServer-开源

    《深入解析:Linux环境下C++实现的多线程服务器框架——nioServer》 在IT行业中,服务器开发是一项至关重要的任务,特别是在高性能、高并发的场景下。本文将深入探讨一个名为"nioServer"的开源项目,它是一个在...

    java nio im(server+client)

    Java NIO,全称为Non-Blocking Input/Output(非阻塞输入/输出),是Java从1.4版本开始引入的一种新的I/O模型,相对于传统的BIO( Blocking I/O)模型,NIO在处理高并发、大数据量的网络应用时表现出更高的效率和...

    java NIO实例

    `NIOServer.java`和`NIOClient.java`这两个文件很可能是用于演示Java NIO服务器端和客户端的基本操作。下面将详细介绍Java NIO的主要组件和工作原理,并结合这两个文件名推测它们可能包含的内容。 1. **Selector...

    android nio程序

    本篇将深入探讨`android nio`程序,主要关注`NioServer`和`NioClient`两个示例程序。 ### 一、`java.nio`概述 `java.nio`是Java平台提供的一种I/O模型,与传统的`java.io`流模型相比,具有以下优势: 1. **缓冲区...

    Java NIO 聊天室 JSwing

    package com.ui.server; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class ServerBootFrame extends JFrame { /** * */ private static final long serialVersionUID = 1L...

    一个java NIO的例子

    本例子中的"NioServer"可能是一个简单的Java NIO服务器端程序,用于演示如何使用NIO进行网络通信。下面我们将深入探讨Java NIO的关键组件和工作原理。 1. **通道(Channel)**:通道是数据传输的途径,类似于传统的...

    基于java NIO的socket通信demo

    首先,我们来看`NioServer.java`。这个文件中包含了一个基于NIO的服务器端实现。服务器的核心组件是`Selector`,它允许一个单独的线程监听多个套接字通道的状态变化。当客户端发起连接请求时,服务器会注册`...

    Servlet API 和 NIO: 最终组合在一起

    "nioserver"可能是实现NIO服务器的代码;"bin"目录通常包含编译后的可执行文件或类库。通过研究这些文件,可以深入学习Servlet API和NIO的结合应用,以及具体的实现细节。 总的来说,Servlet API和NIO的结合使用...

    java nio server-开源

    小型简单但完整的Java NIO服务器,任何人都可以免费使用。 目前,它仅处理发送和接收字符串,并且尚未进行优化-但它易于理解并适应您的需求。

    JAVA NIO 异步通信模板服务端

    例如,可能有一个名为`NioServer`的主类,用于初始化ServerSocketChannel,注册选择器,以及处理接收到的连接和数据。还有可能包含`ThreadPool`类,用于管理线程池,以及`BufferHandler`类,负责处理缓冲区中的数据...

    使用Java_NIO编写高性能的服务器.doc

    根据提供的部分代码示例,我们可以看到`NIOServer`类定义了一些基本的NIO组件,如`ByteBuffer`、`SelectionKey`、`Selector`等,并且定义了一个内部类`HandleClient`用于处理客户端请求。这部分代码展示了如何使用...

    Java NIO原理 图文分析及代码实现

    new NIOServer().initServer(8888); } catch (IOException e) { e.printStackTrace(); } } } ``` 以上代码展示了如何使用Java NIO实现一个简单的服务端。在这个例子中,我们创建了一个`ServerSocketChannel`,...

    基于事件的 NIO 多线程服务器

    "nioserver"很可能是一个基础的NIO服务器实现,它可能包含了ServerSocketChannel、SocketChannel、ByteBuffer等关键组件的使用,展示了如何接收和发送数据。而"timeserver"可能是一个时间服务器,用于向客户端发送...

    nio资料 自学用 nio资料 自学用

    Java NIO(New Input/Output)是Java标准库中提供的一种I/O...以上文档和资源如"nio.chm"、"NIO+IBM.chm"、"(ebook-pdf)+-+O_'Reilly+-+Java+NIO.pdf"以及"nioserver.zip"和"j-nio"将为自学Java NIO提供宝贵的参考。

    Ioserver java Nio socket 框架

    Ioserver java Nio socket 框架 是个不错的NIO 通讯框架,本来想学习mina框架,看了看mina的源码太头痛,本人觉得看懂了Ioserver 再看mina的框架,想多的学习 java NIO 的也可以下载 看看,很值得学习啊!!!

Global site tag (gtag.js) - Google Analytics