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
NULL 博文链接:https://marcocs410.iteye.com/blog/981157
同时整个服务端的流程处理,建立于事件机制上。在 [接受连接->读->业务处理->写 ->关闭连接 ]这个 过程中,触发器将触发相应事件,由事件处理器对相应事件分别响应,完成服务器端的业务处理。...
NIO非阻塞通讯模式!NIO非阻塞通讯模式!
一个基于事件驱动的JAVA NIO 服务器源码!
java基于nio的通信实例,带UML结构图及server、client源码。
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服务器,任何人都可以免费使用。 目前,它仅处理发送和接收字符串,并且尚未进行优化-但它易于理解并适应您的需求。
Ioserver java Nio socket 框架 是个不错的NIO 通讯框架,本来想学习mina框架,看了看mina的源码太头痛,本人觉得看懂了Ioserver 再看mina的框架,想多的学习 java NIO 的也可以下载 看看,很值得学习啊!!!
本例包含服务器端和客户端,多线程,每线程多次发送,Eclipse工程,启动服务器使用 nu.javafaq.server.NioServer,启动客户端使用 nu.javafaq.client.NioClient。另本例取自javafaq.nv上的程序修改而成
下列描述了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 ...
Linux下用C ++开发多线程服务器的框架。 包括“开箱即用”的骨架服务器和示例Web服务器。
NioSocket,包括server端和client端。server端有自动判定client掉线机制,client端有自动重连机制。本人已在项目实用,未经允许禁止转载!
其中NioServer是服务器端,NioClient是客户端,AClient、BClient、CClient是具体的客户。通过服务端和客户端的Channel通道,客户可以进行读写操作。在现今的聊天软件中,NIO都是其中不可或缺的一部分,希望诸位不要...
基于事件的 NIO 多线程服务器
在该项目中,我使用java选择器接口来实现一个简单的Nio Server。 用 运行src/main/scala/test/Server.Scala ,您在localhost:1237中运行服务器。 然后运行src/main/java/test/SocketClientExample.java ,运行与...
java nio 服务器范例及j2me代码连接服务器的测试代码。
NIOHTTP服务器 带有 JDK 的 NIO 示例 HTTP 服务器 使用以下命令也使用 Maven build 构建项目 ... java -jar target/NIOHTTPServer-1.0-jar-with-dependencies.jar N2 -port 8000 -webroot /www/mysite/
java侧起server(NioUdpServer1.java),基于Java Nio的selector 阻塞等候,一个android app(NioUdpClient1文件夹)和一个java程序(UI.java)作为两个client分别向该server发数据,server收到后分别打印收到的消息...
该包封装过的NIO比sun本身的更容易处理 server中只有区区几行就搞定了: //创建listener TimeHandler timer = new TimeHandler(); //获取Notifier Notifier notifier = Notifier.getNotifier(); //注册监听 notifier....