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-DEMO"提供了关于Java NIO的实际应用,通过Anontion(注解)、Applet(小程序)和NIO的Demo,帮助开发者更深入地理解和掌握这些概念。 首先,让我们深入了解Java NIO。NIO的核心组件包括: 1. **...
在这个“基于java NIO的socket通信demo”中,我们将探讨如何使用NIO进行服务器和客户端的Socket通信,并解决通信过程中的字符集乱码问题。 首先,我们来看`NioServer.java`。这个文件中包含了一个基于NIO的服务器端...
Java的IO操作集中在java.io这个包中,是基于流的同步(blocking)API。对于大多数应用来说,这样的API使用很方便,然而,一些对性能要求较高的应用,尤其是服务端应用,往往需要一个更为有效的方式来处理IO。从JDK ...
在这个javaNIO实例中,我们可以学习到如何利用Java NIO进行文件的读取、写入以及复制操作。 首先,NIO的核心组件包括通道(Channels)、缓冲区(Buffers)和选择器(Selectors)。通道是数据传输的路径,如文件通道...
**NIO(Non-blocking Input/Output)**是Java在1.4版本引入的一种新的I/O模型,它提供了与传统I/O不同的数据处理方式。在传统的IO模型中,数据的读写是阻塞式的,即在读取或写入数据时,程序会暂停执行,等待数据...
在这个基于NIO非阻塞的Java聊天demo中,我们将会看到如何利用NIO实现一个支持单聊和群聊的应用。 首先,NIO的核心组件包括Channel、Buffer、Selector和Pipe。在传统的IO模型中,数据是从流的一端流向另一端,而在...
Java NIO,全称为Non-Blocking Input/Output(非阻塞输入/输出),是Java标准库提供的一种替代传统I/O(BIO)模型的新技术。NIO在Java 1.4版本中引入,旨在提高I/O操作的效率,特别是在处理大量并发连接时。与传统的...
用java编写的nio通信的例子,nio是io编程的新版本,比io较流行。同时本例子是适用socket通信的。可以在此基础上,添加您的个人应用。本例子适用于:java通信的学习者,android平台通信的学习者。
Java NIO(Non-blocking Input/Output)是一种在Java中处理I/O操作的新方式,相比于传统的BIO( Blocking I/O),NIO提供...通过理解和实践"java-NIO-demo",你将能够更好地掌握NIO的精髓,并在实际项目中发挥其优势。
本压缩包包含`JAVA_IO/NIO(demo,压缩jar文件)`,意味着它提供了一些示例代码,用于演示如何使用这两种方法进行文件操作,以及如何将文件打包成jar格式。`io`标签代表传统的Java I/O API,而`nio`标签则代表了Java的...
Netty是一个高性能、异步事件...这个NioDemo示例代码可以帮助我们理解Netty如何利用NIO来实现高效的网络通信。通过阅读和分析源码,我们可以深入理解Netty的事件驱动模型、NIO机制以及如何在实际项目中应用这些概念。
4. **IO/NIO**:了解Java如何进行输入输出操作,以及非阻塞I/O的使用。 5. **多线程编程**:学习线程的创建、同步、锁机制等,以及ExecutorService和并发工具类的应用。 6. **网络编程**:如Socket编程,...
在Java世界中,I/O(输入/输出)是任何应用程序不可或缺的部分。为了处理与外部世界的交互,Java提供了三种不同的I/O模型:BIO( Blocking I/O...这个"bio nio aio demo"项目是学习和比较Java I/O模型的一个宝贵实践。
NIO(Non-blocking I/O)是Java提供的一个高效I/O模型,相较于传统的IO模型,NIO具有非阻塞、多路复用等特性,能够更好地处理大量并发连接。本实例"socket通信NIO代理模式demo"将展示如何利用NIO来构建一个高性能的...
### nio操作demo知识点解析 #### 一、项目概述 本示例代码主要展示了如何使用Java NIO(Non-blocking I/O)技术实现一个简单的数据服务器。该服务器通过多个`SelectorLoop`实例处理客户端连接请求,并利用`...
对于图片,Java爬虫可能会使用`java.net.URL`和`java.nio`包来下载图片流并将其保存到本地。而处理文档,如PDF或Word,可能需要用到第三方库,如Apache POI(处理Microsoft Office格式)或PDFBox(处理PDF)。这些库...
Java NIO(New IO)是Java 1.4版本引入的一种新的I/O API,它提供了非阻塞式的I/O操作,极大地提高了Java处理I/O的能力。在这个“Nio非阻塞socket通信demo”中,我们可以深入理解NIO在Socket通信中的应用。 1. **...