`
helloyesyes
  • 浏览: 1306748 次
  • 性别: Icon_minigender_2
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

nio server

阅读更多


import java.net.InetSocketAddress;
import java.net.Socket;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.channels.SelectionKey;
import java.nio.channels.Selector;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel;
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
import java.nio.charset.CharsetEncoder;
import java.util.Iterator;

public class X {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String[] strs = null;
Selector selector = null;
try {
selector = Selector.open();
ServerSocketChannel server = ServerSocketChannel.open();
server.socket().bind(new InetSocketAddress(8080));
server.configureBlocking(false);
server.register(selector, SelectionKey.OP_ACCEPT);
} catch (Exception e) {
e.printStackTrace();
System.exit(1);
}

int index = 0;
SelectionKey key = null;

Charset charset = Charset.forName("UTF-8");
CharsetEncoder encoder = charset.newEncoder();
CharsetDecoder decoder = charset.newDecoder();
CharBuffer charBuffer = CharBuffer.allocate(1024);
ByteBuffer buffer = ByteBuffer.allocate(1024 * 10);
StringBuffer sBuffer = new StringBuffer();

while(true) {
try {
index = selector.select();
if(index > 0) {
Iterator it = selector.selectedKeys().iterator();

while(it.hasNext()) {
key = (SelectionKey) it.next();
it.remove();

if(key.isValid()) {
if(key.isAcceptable()) {
System.out.println("accept ... ");
Socket socket = ((ServerSocketChannel)key.channel()).accept().socket();
SocketChannel sc = socket.getChannel();
sc.configureBlocking(false);
sc.register(key.selector(), SelectionKey.OP_READ);
} else if(key.isReadable()) {
System.out.println("read ... ");
SocketChannel sc = (SocketChannel) key.channel();

while(sc.read(buffer) > 0) {
buffer.flip();
decoder.decode(buffer, charBuffer, false);
charBuffer.flip();
sBuffer.append(charBuffer).append("\r\n");
//System.out.println(charBuffer);
buffer.clear();
charBuffer.clear();
}
buffer.flip();
strs = sBuffer.toString().split("\r\n");
sc.configureBlocking(false);
sc.register(key.selector(), SelectionKey.OP_WRITE);
} else if(key.isWritable()) {
System.out.println("write ... ");
SocketChannel sc = (SocketChannel) key.channel();

if(strs != null) {
charBuffer.clear();
charBuffer.flip();
System.out.println("length:"+strs.length);
for(int i=0;i<strs.length;i++) {
sc.write(encoder.encode(charBuffer.wrap(strs[i]+"\r\n")));
//sc.write(encoder.encode(charBuffer.wrap("Hello\r\n")));
System.out.println(charBuffer);
charBuffer.clear();
charBuffer.flip();
}
//sc.write(encoder.encode(charBuffer.wrap("\r\n")));
charBuffer.clear();
charBuffer.flip();
}
sc.finishConnect();
sc.close();
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
System.exit(1);
}
}
}

}

分享到:
评论

相关推荐

    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