server
public class Receive {
public static void main(String[] args) throws Exception {
CharsetEncoder encoder = Charset.forName("UTF-8").newEncoder();
ByteBuffer buffer = ByteBuffer.allocate(1024);
ServerSocketChannel ss = ServerSocketChannel.open();
ss.socket().bind(new InetSocketAddress(8888));
ss.configureBlocking(false);
Selector se = Selector.open();
ss.register(se, SelectionKey.OP_ACCEPT);
while (se.select() > 0) {
Set<SelectionKey> set = se.selectedKeys();
for (SelectionKey key : set) {
if (key.isAcceptable()) {
ServerSocketChannel server = (ServerSocketChannel) key.channel();
SocketChannel channel = server.accept();
channel.configureBlocking(false);
channel.register(se, SelectionKey.OP_READ);
} else if (key.isReadable()) {
SocketChannel sc = (SocketChannel) key.channel();
sc.read(buffer);
buffer.flip();
System.out.println("[server]" + new String(buffer.array(), 0, buffer.limit()));
sc.register(se, SelectionKey.OP_WRITE);
} else if (key.isWritable()) {
SocketChannel sc = (SocketChannel) key.channel();
sc.write(encoder.encode(CharBuffer.wrap("send to client.")));
sc.register(se, SelectionKey.OP_READ);
}
}
set.clear();
}
}
}
client
public class Send {
private String ENCODING_UTF8 = "utf-8";
private ByteBuffer buffer = ByteBuffer.allocate(1024);
private CharsetEncoder encoder = Charset.forName(ENCODING_UTF8).newEncoder();
private String server = "localhost";
private Integer port = 8888;
private SocketChannel channel;
private Selector selector;
private void init() throws IOException, ClosedChannelException {
selector = Selector.open();
channel = SocketChannel.open();
channel.configureBlocking(false);
channel.register(selector, SelectionKey.OP_CONNECT
| SelectionKey.OP_WRITE | SelectionKey.OP_READ);
}
public void connect() throws IOException {
channel.connect(new InetSocketAddress(server, port));
while (selector.select() > 0) {
Set<SelectionKey> readyKeys = selector.selectedKeys();
Iterator<SelectionKey> it = readyKeys.iterator();
while (it.hasNext()) {
SelectionKey key = it.next();
if (key.isConnectable()) {
if (channel.isConnectionPending()) {
channel.finishConnect();
}
onSend(key);
} else if (key.isReadable()) {
onReceive(key);
} else if (key.isWritable()) {
onSend(key);
}
it.remove();
}
}
}
private void onReceive(SelectionKey key) throws IOException {
SocketChannel sc = (SocketChannel) key.channel();
sc.read(buffer);
buffer.flip();
System.out.println("[client]"
+ new String(buffer.array(), 0, buffer.limit()));
}
private void onSend(SelectionKey key) throws IOException {
SocketChannel sc = (SocketChannel) key.channel();
sc.write(encoder.encode(CharBuffer.wrap("send to server.")));
}
public static void main(String[] args) throws Exception {
Send del = new Send();
del.init();
del.connect();
}
}
分享到:
相关推荐
nio超简单的小demo的swing版,详情请见http://blog.csdn.net/lingchen_yu,blog名字叫《java nio demo简单nio项目》,建议先看一下,因为没写神马注释
JavaNIO Demo
java NIO 创建的服务端,能够异步响应客户端的请求,客户端采用nio异步请求服务端,通信之间的乱码使用charset解决
Anontion、Applet、NIO等Demo,可以辅助理解一下相关知识点
Java的IO操作集中在java.io这个包中,是基于流的同步(blocking)API。对于大多数应用来说,这样的API使用很方便,然而,一些对性能要求较高的应用,尤其是服务端应用,往往需要一个更为有效的方式来处理IO。从JDK ...
java nio 演示代码
用java编写的nio通信的例子,nio是io编程的新版本,比io较流行。同时本例子是适用socket通信的。可以在此基础上,添加您的个人应用。本例子适用于:java通信的学习者,android平台通信的学习者。
该资源包含了一个用javaNIO实现的读写文件以及复制文件的简单的demo,程序注释清晰,简单易懂,喜欢的下载!!!
一个简单的javaNIO非阻塞的聊天小demo,支持单聊和群聊
java,bio、伪异步io、nio的demo例子安装完JDK可以直接运行
io/nio各种文件读写方法。文件压缩成jar包。
Java NIO通道:通道基础、文件通道、Socket通道、工具类 Java NIO缓冲区:基础、缓冲区(Buffer)、创建缓冲区、直接缓冲区(DirectByteBuffer) Java NIO选择器:核心概念、选择器使用、Demo、选择器深入、
socket通信nio模式有很多实现方式,但是在性能上、资源上一般很少考虑,这里封装了一个性能极强的程序。
JavaIO和NIO练习,主要是依据新旧JavaIO所写的一个输出输入流的Demo
本人写的Nio非阻塞socket通信demo,内有注释。
Apache MINA是一个网络应用程序框架,用来帮助用户简单地开发高性能和高可扩展性的...它提供了一个通过Java NIO在不同的传输例如TCP/IP和UDP/IP上抽象的事件驱动的异步API。 上传自己修改的demo,java版,亲测可用。
程序采用Spring框架,简化了JDBC和RMI的样板式代码,并配置了Druid数据库连接池,同时,为了满足高并发的需求,采用了NIO框架Netty,更好地支持大量终端同时定位。程序已经Maven化。 github地址以及使用说明在压缩包...
javanio.zip 23.NIO非阻塞通信(Socket/UDP实例、简单聊天系统) javarmi.zip 24.RMI编程(HelloWorld例、计算器实例) javacorba.zip 25.Corba编程(HelloWorld例、计算器实例) 第6部分(4个程序包) java...
nio-demo NIO编程demo 主要内容: 1、使用NIO实现文件读写,文件拷贝 2、使用NIO实现Socket编程 注:com.minghui.nio.demo包下是IBM官方demo