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 643Thread.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 559问: 怎么改变final属性? public cl ... -
直接插入排序
2015-05-09 17:47 558插入排序包括 直接插入排序, 折半插入排序, 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 362快速排序使用分治法策略来把一个串行分为两个子串行。 步骤 ... -
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-DEMO"提供了关于Java NIO的实际应用,通过Anontion(注解)、Applet(小程序)和NIO的Demo,帮助开发者更深入地理解和掌握这些概念。 首先,让我们深入了解Java NIO。NIO的核心组件包括: 1. **...
在这个“基于java NIO的socket通信demo”中,我们将探讨如何使用NIO进行服务器和客户端的Socket通信,并解决通信过程中的字符集乱码问题。 首先,我们来看`NioServer.java`。这个文件中包含了一个基于NIO的服务器端...
用java编写的nio通信的例子,nio是io编程的新版本,比io较流行。同时本例子是适用socket通信的。可以在此基础上,添加您的个人应用。本例子适用于:java通信的学习者,android平台通信的学习者。
在这个“Nio非阻塞socket通信demo”中,我们可以深入理解NIO在Socket通信中的应用。 1. **Java NIO基础** - **通道(Channels)**:NIO的核心概念之一,通道是数据读写的目标或来源,如文件通道、套接字通道等。...
在Java世界中,I/O(输入/输出)是任何应用程序不可或缺的部分。为了处理与外部世界的交互,Java提供了三种不同的I/O模型:BIO( Blocking I/O...这个"bio nio aio demo"项目是学习和比较Java I/O模型的一个宝贵实践。
Netty是一个高性能、异步事件...这个NioDemo示例代码可以帮助我们理解Netty如何利用NIO来实现高效的网络通信。通过阅读和分析源码,我们可以深入理解Netty的事件驱动模型、NIO机制以及如何在实际项目中应用这些概念。
本实例"socket通信NIO代理模式demo"将展示如何利用NIO来构建一个高性能的代理服务器。 代理模式是一种设计模式,它允许我们创建一个代理对象来控制对原对象的访问。在NIO代理模式中,代理服务器作为客户端与目标...
它不仅涉及到网络编程的基础知识,如套接字通信,还涵盖了多线程、并发控制以及高效数据传输的技巧,是学习和理解Java NIO体系结构的一个很好的实践案例。通过深入研究和分析这个项目,开发者能够更好地掌握NIO在...
**NIO(Non-blocking Input/Output)**是Java在1.4版本引入的一种新的I/O模型,它提供了与传统I/O不同的数据处理方式。在传统的IO模型中,数据的读写是阻塞式的,即在读取或写入数据时,程序会暂停执行,等待数据...
在Java的IO编程中,NIO(Non-blocking Input/Output,非阻塞输入输出)是一种高效的数据处理方式,尤其适用于高并发场景。本示例主要关注如何使用NIO解决“沾包”问题以及处理因缓冲区满导致的写入失败问题。首先,...
对于图片,Java爬虫可能会使用`java.net.URL`和`java.nio`包来下载图片流并将其保存到本地。而处理文档,如PDF或Word,可能需要用到第三方库,如Apache POI(处理Microsoft Office格式)或PDFBox(处理PDF)。这些库...
在Java编程领域,NIO(Non-blocking Input/Output,非阻塞I/O)是一种重要的I/O模型,相较于传统的BIO(Blocking I/O),NIO提供了更高效的数据传输方式,尤其适用于高并发、低延迟的场景。本Demo展示了如何在服务端...
Java系统Demo可能涵盖了从基础的面向对象编程到复杂的框架集成,包括MVC模式、Spring Boot、MyBatis等,以及数据库交互、网络通信、多线程、并发控制等多个方面。它可能是为了教育目的,让学习者通过实际操作来加深...
【标题】:“netty+C#通信Demo”是一个关于如何实现Netty与C#之间通信的示例项目。这个Demo展示了如何使用这两个不同平台的技术进行高效、稳定的数据交换。 【描述】:这个Demo提供了实际操作的例子,说明了Netty...
在"JavaIODemo"这个练习中,我们可能会看到以下内容: 1. 流的创建与使用:演示如何创建输入流和输出流对象,例如从文件读取数据并写入到另一个文件。 2. 缓冲技术:使用BufferedReader和BufferedWriter实现高效的...
Mina框架是一个轻量级的网络通信框架,基于Java NIO构建,它简化了网络编程的复杂性,提供了高效的I/O处理能力。Mina支持多种协议,如TCP、UDP等,适用于开发服务器端和客户端应用。Mina的核心组件包括IoSession...
NIO(New IO)是Java 1.4引入的新特性,提供了非阻塞IO和选择器,提高了性能和可伸缩性。`File`类用于文件操作,`BufferedReader`和`BufferedWriter`用于提高读写效率,而`ObjectInputStream`和`ObjectOutputStream`...
标题中的“服务端基于MINA2的UDP双向通信Demo演示(Java客户端)”是指使用Apache MINA框架在Java中实现的UDP(用户数据报协议)的双向通信示例。MINA是一个高性能、异步的网络应用程序框架,常用于构建网络服务,如...
本示例“vc++ 与java通讯DEMO”提供了一个具体的案例,演示了如何使用VC++(Microsoft Foundation Classes)的MFC库与Java应用程序进行通信。下面将详细介绍这个DEMO中的关键知识点。 首先,我们要理解MFC。MFC是...
压缩包中的`demo3.txt`展示了如何使用NIO的`FileChannel`进行文件读写,而`demo4read.txt`和`demo4write.txt`则演示了如何利用`SocketChannel`进行网络通信。 三、反应器模式(Reactor) Reactor是Java NIO的一种...