`
helloyesyes
  • 浏览: 1272316 次
  • 性别: 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.java

    NioServer.java

    NIOServer

    NULL 博文链接:https://marcocs410.iteye.com/blog/981157

    nioserver.zip

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

    nioserver.rar_NIO_java nio

    NIO非阻塞通讯模式!NIO非阻塞通讯模式!

    nioserver.zip_NIO_event driven java_java nio_java nioserv_nioser

    一个基于事件驱动的JAVA NIO 服务器源码!

    java nio im(server+client)

    java基于nio的通信实例,带UML结构图及server、client源码。

    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 server-开源

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

    Ioserver java Nio socket 框架

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

    java nio socket 例子

    本例包含服务器端和客户端,多线程,每线程多次发送,Eclipse工程,启动服务器使用 nu.javafaq.server.NioServer,启动客户端使用 nu.javafaq.client.NioClient。另本例取自javafaq.nv上的程序修改而成

    JNSP (java network service platform)

    下列描述了JNSP(java network service platform)服务的...java -classpath ./:./bin/:/home/huangzheng/MyTest/pack/nioserver.jar:/home/huangzheng/MyTest/pack/lib/log4j-1.2.15.jar -server -Xms1024m -Xmx1024m ...

    nioServer-开源

    Linux下用C ++开发多线程服务器的框架。 包括“开箱即用”的骨架服务器和示例Web服务器。

    NioSocket,包括server端和client端

    NioSocket,包括server端和client端。server端有自动判定client掉线机制,client端有自动重连机制。本人已在项目实用,未经允许禁止转载!

    NIO网络编程-简易聊天室

    其中NioServer是服务器端,NioClient是客户端,AClient、BClient、CClient是具体的客户。通过服务端和客户端的Channel通道,客户可以进行读写操作。在现今的聊天软件中,NIO都是其中不可或缺的一部分,希望诸位不要...

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

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

    scala-nio-server:Scala中的一个Nio服务器示例

    在该项目中,我使用java选择器接口来实现一个简单的Nio Server。 用 运行src/main/scala/test/Server.Scala ,您在localhost:1237中运行服务器。 然后运行src/main/java/test/SocketClientExample.java ,运行与...

    java_Nio_server_and_j2me_client.rar_J2ME SERVER_NIO_j2me_j2me ni

    java nio 服务器范例及j2me代码连接服务器的测试代码。

    NIOHTTPServer:带有 JDK 的 NIO 示例 HTTP 服务器

    NIOHTTP服务器 带有 JDK 的 NIO 示例 HTTP 服务器 使用以下命令也使用 Maven build 构建项目 ... java -jar target/NIOHTTPServer-1.0-jar-with-dependencies.jar N2 -port 8000 -webroot /www/mysite/

    Java Nio selector例程

    java侧起server(NioUdpServer1.java),基于Java Nio的selector 阻塞等候,一个android app(NioUdpClient1文件夹)和一个java程序(UI.java)作为两个client分别向该server发数据,server收到后分别打印收到的消息...

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

    该包封装过的NIO比sun本身的更容易处理 server中只有区区几行就搞定了: //创建listener TimeHandler timer = new TimeHandler(); //获取Notifier Notifier notifier = Notifier.getNotifier(); //注册监听 notifier....

Global site tag (gtag.js) - Google Analytics