java NIO通信demo
- 博客分类:
- java类
server端
public class NIOServer { private Selector selector; public static void main(String[] args){ NIOServer s = new NIOServer(); s.initSelector(); s.run(); } public void run(){ while(true){ try{ selector.select(); Iterator it = selector.selectedKeys().iterator(); while(it.hasNext()){ SelectionKey key = (SelectionKey)it.next(); it.remove(); if(!key.isValid()){ continue; } else if(key.isAcceptable()){ accept(key); } else if(key.isReadable()){ read(key); } } }catch(Exception e){ e.printStackTrace(); } try { Thread.sleep(500); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } public void read(SelectionKey key){ SocketChannel sssc =(SocketChannel)key.channel(); if(sssc.isOpen()&&sssc.isConnected()){ System.out.println("read"); new ReadThread(key).start(); } } public void accept(SelectionKey key) throws Exception{ System.out.println("有客户接入"); ServerSocketChannel ssc = (ServerSocketChannel)key.channel(); SocketChannel sc = ssc.accept(); sc.configureBlocking(false); sc.register(selector, SelectionKey.OP_READ); } public void initSelector(){ try { selector = SelectorProvider.provider().openSelector(); ServerSocketChannel channel = ServerSocketChannel.open(); channel.configureBlocking(false); channel.socket().bind(new InetSocketAddress(8000)); channel.socket().setReuseAddress(true); channel.register(selector, SelectionKey.OP_ACCEPT); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
监听线程:取得客户端连接
public class ReadThread extends Thread{ private SocketChannel sc; private SelectionKey key; public ReadThread(SelectionKey key){ this.key = key; } public void run() { String s = read(); System.out.println("收到:"+s); if(s!=null&&!s.equals("")) write("you see:"+s); } public String read(){ int cnt = 0; ByteBuffer bb = ByteBuffer.allocate(4000); sc = (SocketChannel)key.channel(); String rt = ""; try{ while(sc.isConnected()&&sc.isOpen()&&(cnt = sc.read(bb))>0){ String t = new String(bb.array(),"utf-8").trim(); rt = rt+t; bb.clear(); } return rt; }catch(Exception e){ e.printStackTrace(); } finally{ key.cancel(); } return null; } public void write(String str){ try { if(sc.isConnected()&&sc.isOpen()) sc.write(ByteBuffer.wrap(str.getBytes())); } catch (IOException e) { e.printStackTrace(); } finally{ try { sc.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
客户端
public class NIOClient { Selector selector; SocketChannel sc ; public void init(){ try { selector = Selector.open(); sc = SocketChannel.open(); sc.connect(new InetSocketAddress("127.0.0.1",8000)); sc.configureBlocking(false); sc.register(selector, SelectionKey.OP_READ); } catch (IOException e) { e.printStackTrace(); } } public void send(String str){ try { if(sc.isConnected()){ sc.write(ByteBuffer.wrap(str.getBytes())); }else{ System.out.println("没有连接成功"); } } catch (IOException e) { e.printStackTrace(); } } public String read(){ ByteBuffer bb = ByteBuffer.allocate(4000); try { if(selector.select(1000)==1){ Iterator it = selector.selectedKeys().iterator(); while(it.hasNext()){ String rt = ""; SelectionKey k = (SelectionKey)it.next(); it.remove(); int cnt = 0; if(k.isReadable()){ SocketChannel s = (SocketChannel)k.channel(); while(s.isOpen()&&(cnt=s.read(bb))>0){ rt += new String(bb.array()).trim(); bb.clear(); } s.close(); } close(); k.cancel(); return rt; } } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } public void close(){ try { sc.close(); selector.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void main(String[] args){ NIOClient l = new NIOClient(); l.init(); l.send("eee"); System.out.println(l.read()); } }
发表评论
-
java中断线程
2015-05-21 18:29 606Thread.stop方法可能中断线程,但不安全,此方法都 ... -
NIO下载服务器模拟实现(一)
2015-05-21 11:28 0从JDK 1.4开始,Java的标 ... -
java NIO教程
2015-05-18 10:39 0Java NIO提供了与标准IO ... -
Java反射,改变final属性
2015-05-16 16:58 525问: 怎么改变final属性? public cl ... -
直接插入排序
2015-05-09 17:47 537插入排序包括 直接插入排序, 折半插入排序, Shell排序 ... -
曾经的笔试题-- java Cloneable
2015-05-09 10:12 0public class CloneTest { ... -
一个公司的笔试题
2015-05-09 08:02 01.编程题,用两个线程实现对容量为10的队列的加入与取出. ... -
Shell排序
2014-03-26 17:01 0在 -
快速排序
2015-05-09 13:52 338快速排序使用分治法策略来把一个串行分为两个子串行。 步骤 ... -
java 虚拟机加载机制
2014-03-25 10:42 0虚拟机把描述类的数据从class文件加载到内存,并对数据进 ... -
java Class 类
2014-03-25 10:01 0Class对象 是用来创建类的常规对象的,当我们编译一个Ja ... -
成都网丁有限公司面试题
2014-03-24 16:44 0OO OO的原理 值传递与引用传递 ... -
自律编(一) java访问修饰符
2014-03-24 16:23 0一直以为java里只有三种访问修饰符 public, pr ... -
华莱公司笔试
2014-03-12 19:49 0public class Test { publi ... -
sleep与wait
2014-03-03 14:43 0Obj.wait(),与Obj.notify()必须要与syn ... -
线程、进程
2014-03-03 14:39 0线程:程序内部独立运行单位 线程与进程区别: 1 ... -
transient
2014-03-03 13:59 0java语言的关键字,变量修饰符,如果用transient声 ... -
java中关键字volatile的作用
2014-03-03 13:57 0用在多线程,同步变量。 线程为了提高效率,将某成员变量(如A ... -
手机音响(一) java客户端逻辑层
2014-02-17 10:48 0北京科*公司配了一台电脑给我,但没有声音,耳机要连到主机箱 ... -
游戏 压力测试工具
2014-02-14 18:16 0公司让我为游戏做个 压力测试工具 ...
相关推荐
用java编写的nio通信的例子,nio是io编程的新版本,比io较流行。同时本例子是适用socket通信的。可以在此基础上,添加您的个人应用。本例子适用于:java通信的学习者,android平台通信的学习者。
java NIO 创建的服务端,能够异步响应客户端的请求,客户端采用nio异步请求服务端,通信之间的乱码使用charset解决
本人写的Nio非阻塞socket通信demo,内有注释。
socket通信nio模式有很多实现方式,但是在性能上、资源上一般很少考虑,这里封装了一个性能极强的程序。
本源码是《NIO框架入门(二):服务端基于MINA2的UDP双向通信Demo演示》一文的Java客户端源码实现,详见:http://www.52im.net/thread-373-1-1.html
javanio.zip 23.NIO非阻塞通信(Socket/UDP实例、简单聊天系统) javarmi.zip 24.RMI编程(HelloWorld例、计算器实例) javacorba.zip 25.Corba编程(HelloWorld例、计算器实例) 第6部分(4个程序包) java...
javanio.zip 23.NIO非阻塞通信(Socket/UDP实例、简单聊天系统) javarmi.zip 24.RMI编程(HelloWorld例、计算器实例) javacorba.zip 25.Corba编程(HelloWorld例、计算器实例) 第6部分(4个程序包) java...
Netty是基于Java NIO client-server的网络应用框架,使用Netty可以快速开发网络应用
javanio.zip 23.NIO非阻塞通信(Socket/UDP实例、简单聊天系统) javarmi.zip 24.RMI编程(HelloWorld例、计算器实例) javacorba.zip 25.Corba编程(HelloWorld例、计算器实例) 第6部分(4个程序包) java...
java原始码Java套接字I / O:阻塞,非阻塞和异步 介绍 在描述I / O时,术语“非阻塞”和“异步”通常可以互换使用,但是它们之间存在显着差异。 本文描述了Java中非阻塞和异步套接字I / O操作之间的理论和实践差异。...
项目中,你可以清晰地看到BIO与NIO模型在Netty中的灵活运用,如何通过Netty的高性能特性来优化网络通信。此外,demo还详细展示了如何通过自定义编解码器处理网络通信中的数据编解码问题,以及如何利用心跳机制确保...
「喜欢的自提」 可以直接运行的代码,里面是我在工作中用来学和和测试的代码,一般是得到想要的测试结果,就直接用于实战项目中...17、BIO、NIO、AIO、Reactor、netty相关学习总结和测试(客户端/服务端通信测试demo)
利用idea,构建的maven项目,用idea打开即可测试运行,实现了netty的服务段和客户端,利用netty实现服务端和客户端的通信demo.
RocketMQ|[Spring Cloud Alibaba(五)RocketMQ 异步通信实现](https://github.com/smltq/spring-boot-demo/blob/master/cloud-alibaba/README5.md) ### 其它 模块名称|主要内容 ---|--- leetcode|[力扣题解...
HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件、客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++、C#、Delphi、E(易语言)、Java、Python 等编程语言接口...
nettynetty 练习项目netty : 由jboss开发的基于JavaNIO(IO多路复用或异步IO)采用ReacotrIo设计模式的高性能,高伸缩性的网络通信框架,用来开发高性能网络应用程序
笔者本人比较喜欢使用tornado,做了几年后台开发,使用最多的框架之一的就是它,NIO模型,而且非常轻量级,同样的rps,java可能需要700-800M的内存,tornado只要30-40M,所以在一台4G内存的机子上可以跑上百个...