`
absolute
  • 浏览: 188230 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

java nio demo

 
阅读更多

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();
	}
}
 
分享到:
评论

相关推荐

    java nio demo wing版

    nio超简单的小demo的swing版,详情请见http://blog.csdn.net/lingchen_yu,blog名字叫《java nio demo简单nio项目》,建议先看一下,因为没写神马注释

    JavaNIO Demo

    JavaNIO Demo

    基于java NIO的socket通信demo

    java NIO 创建的服务端,能够异步响应客户端的请求,客户端采用nio异步请求服务端,通信之间的乱码使用charset解决

    JAVA-NIO-DEMO

    Anontion、Applet、NIO等Demo,可以辅助理解一下相关知识点

    java.nio demo

    Java的IO操作集中在java.io这个包中,是基于流的同步(blocking)API。对于大多数应用来说,这样的API使用很方便,然而,一些对性能要求较高的应用,尤其是服务端应用,往往需要一个更为有效的方式来处理IO。从JDK ...

    niodemo.zip

    java nio 演示代码

    java nio 通信服务器、客户端完整例子

    用java编写的nio通信的例子,nio是io编程的新版本,比io较流行。同时本例子是适用socket通信的。可以在此基础上,添加您的个人应用。本例子适用于:java通信的学习者,android平台通信的学习者。

    javaNIO实例

    该资源包含了一个用javaNIO实现的读写文件以及复制文件的简单的demo,程序注释清晰,简单易懂,喜欢的下载!!!

    基于NIO非阻塞的java聊天demo(支持单聊和群聊)

    一个简单的javaNIO非阻塞的聊天小demo,支持单聊和群聊

    java-NIO-demo

    java,bio、伪异步io、nio的demo例子安装完JDK可以直接运行

    JAVA_IO/NIO(demo,压缩jar文件)

    io/nio各种文件读写方法。文件压缩成jar包。

    Java NIO(通道+缓冲区+选择器)

    Java NIO通道:通道基础、文件通道、Socket通道、工具类 Java NIO缓冲区:基础、缓冲区(Buffer)、创建缓冲区、直接缓冲区(DirectByteBuffer) Java NIO选择器:核心概念、选择器使用、Demo、选择器深入、

    socket通信NIO代理模式demo实例

    socket通信nio模式有很多实现方式,但是在性能上、资源上一般很少考虑,这里封装了一个性能极强的程序。

    JavaIO和NIO练习

    JavaIO和NIO练习,主要是依据新旧JavaIO所写的一个输出输入流的Demo

    Nio非阻塞socket通信demo

    本人写的Nio非阻塞socket通信demo,内有注释。

    mina源代码java demo(亲测可用)

    Apache MINA是一个网络应用程序框架,用来帮助用户简单地开发高性能和高可扩展性的...它提供了一个通过Java NIO在不同的传输例如TCP/IP和UDP/IP上抽象的事件驱动的异步API。 上传自己修改的demo,java版,亲测可用。

    ibeacon三点定位demo(java代码)

    程序采用Spring框架,简化了JDBC和RMI的样板式代码,并配置了Druid数据库连接池,同时,为了满足高并发的需求,采用了NIO框架Netty,更好地支持大量终端同时定位。程序已经Maven化。 github地址以及使用说明在压缩包...

    java高手真经 光盘源码

    javanio.zip 23.NIO非阻塞通信(Socket/UDP实例、简单聊天系统) javarmi.zip 24.RMI编程(HelloWorld例、计算器实例) javacorba.zip 25.Corba编程(HelloWorld例、计算器实例) 第6部分(4个程序包) java...

    nio-demo:NIO编辑演示

    nio-demo NIO编程demo 主要内容: 1、使用NIO实现文件读写,文件拷贝 2、使用NIO实现Socket编程 注:com.minghui.nio.demo包下是IBM官方demo

Global site tag (gtag.js) - Google Analytics