- 浏览: 167900 次
- 来自: ...
文章分类
最新评论
-
hellostory:
不知所云………………
如何使用反射访问类的private域和方法 -
xusong_zidingyi:
如果在linux下面的话就没有办法运行了,因为linux没有办 ...
使用tesseract破解checkCode -
javajava22:
Errors accessing files. There m ...
使用tesseract破解checkCode -
suncathay:
qljobs 写道cmd.add("E:/Works ...
使用tesseract破解checkCode -
zuoxu128:
TIFFImageWriteParam ,这个类是哪个包的啊
使用tesseract破解checkCode
(1)server主要是读取client发过来的信息,并返回一条信息
/** * @author Jeff */ public class HelloWorldServer { static int BLOCK = 1024; static String name = ""; protected Selector selector; protected ByteBuffer clientBuffer = ByteBuffer.allocate(BLOCK); protected CharsetDecoder decoder; static CharsetEncoder encoder = Charset.forName("GB2312").newEncoder(); public HelloWorldServer(int port) throws IOException{ selector = this.getSelector(port); Charset charset = Charset.forName("GB2312"); decoder = charset.newDecoder(); } // 获取Selector protected Selector getSelector(int port) throws IOException { ServerSocketChannel server = ServerSocketChannel.open(); Selector sel = Selector.open(); server.socket().bind(new InetSocketAddress(port)); server.configureBlocking(false); server.register(sel, SelectionKey.OP_ACCEPT); return sel; } // 监听端口 public void listen() { try { for (;;) { selector.select(); Iterator iter = selector.selectedKeys().iterator(); while (iter.hasNext()) { SelectionKey key = (SelectionKey) iter.next(); iter.remove(); process(key); } } } catch (IOException e) { e.printStackTrace(); } } // 处理事件 protected void process(SelectionKey key) throws IOException { if (key.isAcceptable()) { // 接收请求 ServerSocketChannel server = (ServerSocketChannel) key.channel(); SocketChannel channel = server.accept(); // 设置非阻塞模式 channel.configureBlocking(false); channel.register(selector, SelectionKey.OP_READ); } else if (key.isReadable()) { // 读信息 SocketChannel channel = (SocketChannel) key.channel(); int count = channel.read(clientBuffer); if (count > 0) { clientBuffer.flip(); CharBuffer charBuffer = decoder.decode(clientBuffer); name = charBuffer.toString(); // System.out.println(name); SelectionKey sKey = channel.register(selector, SelectionKey.OP_WRITE); sKey.attach(name); } else { channel.close(); } clientBuffer.clear(); } else if (key.isWritable()) { // 写事件 SocketChannel channel = (SocketChannel) key.channel(); String name = (String) key.attachment(); ByteBuffer block = encoder.encode(CharBuffer.wrap("Hello !" + name)); channel.write(block); // channel.close(); } } public static void main(String[] args) { int port = 8888; try { HelloWorldServer server = new HelloWorldServer(port); System.out.println("listening on " + port); server.listen(); } catch (IOException e) { e.printStackTrace(); } } }
(2)client端代码
/** * * @author Jeff * */ public class HelloWorldClient { static int SIZE = 10; static InetSocketAddress ip = new InetSocketAddress("localhost", 8888); static CharsetEncoder encoder = Charset.forName("GB2312").newEncoder(); static class Message implements Runnable { protected String name; String msg = ""; public Message(String index) { this.name = index; } public void run() { try { long start = System.currentTimeMillis(); //打开Socket通道 SocketChannel client = SocketChannel.open(); //设置为非阻塞模式 client.configureBlocking(false); //打开选择器 Selector selector = Selector.open(); //注册连接服务端socket动作 client.register(selector, SelectionKey.OP_CONNECT); //连接 client.connect(ip); //分配内存 ByteBuffer buffer = ByteBuffer.allocate(8 * 1024); int total = 0; _FOR: for (;;) { selector.select(); Iterator iter = selector.selectedKeys().iterator(); while (iter.hasNext()) { SelectionKey key = (SelectionKey) iter.next(); iter.remove(); if (key.isConnectable()) { SocketChannel channel = (SocketChannel) key .channel(); if (channel.isConnectionPending()) channel.finishConnect(); channel .write(encoder .encode(CharBuffer.wrap(name))); channel.register(selector, SelectionKey.OP_READ); } else if (key.isReadable()) { SocketChannel channel = (SocketChannel) key .channel(); int count = channel.read(buffer); if (count > 0) { total += count; buffer.flip(); while (buffer.remaining() > 0) { byte b = buffer.get(); msg += (char) b; } buffer.clear(); } else { client.close(); break _FOR; } } } } double last = (System.currentTimeMillis() - start) * 1.0 / 1000; System.out.println(msg + "used time :" + last + "s."); msg = ""; } catch (IOException e) { e.printStackTrace(); } } } public static void main(String[] args) throws IOException { String names[] = new String[SIZE]; for (int index = 0; index < SIZE; index++) { names[index] = "jeff[" + index + "]"; new Thread(new Message(names[index])).start(); } } }
转载地址:http://ecjtu05.blog.sohu.com/119571227.html
发表评论
-
一些随想
2012-06-01 22:05 0需求 idea 方案 执 ... -
Redis的安装与使用
2011-10-24 20:04 1292今天看了下redis相关的东东,做个备忘。 Re ... -
Redis的安装与使用
2011-10-24 20:00 0Redis 服务端: http://cocos.iteye. ... -
GenericDAO
2011-07-31 14:49 0GenericDAO -
loadfromproperties
2011-07-31 14:48 0loadfromproperties -
resultcode
2011-07-31 14:47 0resultcode -
berkeleydb的使用
2011-10-24 20:05 1883在napoli的代码中发现这个berkeleydb,版本为3. ... -
几种简单的Load Balance方法
2011-07-31 13:44 0以下代码出自napoli (1)定义Selec ... -
参数断言工具
2011-07-31 12:58 952见代码: public final class Argume ... -
如何检测线上代码的运行情况---BTrace使用分享
2011-04-10 17:36 2087(1)你是否有时发现线上的代码运行效率不高,但却无法定位到底具 ... -
napoli和JMS,mq的一些知识
2010-11-26 21:01 01 jms和mq (1)jms activeMQ 应用 h ... -
Taglib基础知识
2010-11-26 12:41 0浅论taglib设计 : http://wenku.bai ... -
java编码问题的一些文章
2010-11-11 17:30 0http://www.iteye.com/topic/8047 ... -
URL在转码的过程中数据丢失
2010-10-25 14:52 0示例代码 import java.io.Unsuppo ... -
遍历大容量map的正确方法
2010-10-08 13:20 11192首先,遍历map有以下方法: import java.uti ... -
B2B-Code Review规范
2010-08-31 10:15 01.目标 凡事知其然还要知其所以然,我们首先需要知道什么 ... -
多线程书写及code review规范
2010-08-31 10:09 14501. 不允许将Calendar用于类的静态成员 ... -
域名白名单检查
2010-08-24 21:05 0首先准备一份白名单名为safe-domain.xml ,如下: ... -
如何使用反射访问类的private域和方法
2010-08-17 21:44 5132如何使用反射访问类的private域和方法?非常简单,由 ... -
FindBugs插件的安装与使用
2010-04-21 10:54 19141 什么是FindBugs FindBugs 是一个静态分析 ...
相关推荐
标题中的"NIO实例"指的是Java中的非阻塞I/O(Non-blocking Input/Output)技术,它是Java从1.4版本开始引入的一种I/O...通过阅读相关博文和研究代码实例,我们可以深入理解并掌握NIO技术,提高我们的Java网络编程能力。
在"**NIO学习-Java源代码分享**"这个压缩包中,可能包含了关于NIO的示例代码,包括使用NIO进行文件操作、网络通信的实例,也可能包含Netty或Mina的部分源码,这些都可以作为学习和研究NIO技术的宝贵资源。...
"Java NIO实例UDP发送接收数据代码分享" Java NIO(Non-blocking I/O)是一种异步I/O模型,允许开发者在单个线程中处理多个I/O操作,从而提高程序的性能和可扩展性。在Java NIO中,DatagramChannel是专门用于发送...
在上述代码示例中,`Watcher`类展示了如何创建一个`WatchService`并监听指定目录的事件。当文件系统发生变化时,程序会接收到相应的`WatchEvent`,从而避免了低效的轮询操作。 2. **选择器(Selectors)和多路复用...
Java的非阻塞I/O(Non-blocking Input/Output, NIO)是Java 1.4引入的一个重要特性,它提供了一种不同于传统阻塞I/O的处理方式,尤其是在高并发和大数据传输场景下表现优越。NIO管道(Pipe)是NIO中用于线程间通信的...
- **社区支持**:加入相关的开发者社区,获取帮助、分享经验,共同进步。 通过以上内容,我们可以了解到Java NIO网络框架xSocket的核心概念、特点和应用场景。对于Java程序员来说,掌握NIO技术和使用xSocket框架...
"原创nio socket mina+javascript+flash实现commet长连接网页聊天室"揭示了一个基于Java NIO(Non-blocking I/O)的Socket通信框架Mina与JavaScript、Flash技术结合,实现COMET(Comet是使服务器向浏览器推送数据的...
压缩文件“IO、文件、NIO【草案二】.docx”很可能包含了作者对这些主题的详细分析和示例代码,可能包括最佳实践、常见问题和解决方案,以及可能的性能优化技巧。读者可以通过阅读这份文档深入学习IO、文件操作和NIO...
6. **实例分析**:通过SumServer.java、SumServer2.java、SumServer3.java这三份代码,可能分别演示了简单的NIO服务器、改进版和更复杂的实现,对比分析它们的区别和性能优化。 7. **同步与异步**:讨论NIO的异步...
Apache MINA(Multipurpose ...当前发行的 MINA 版本支持基于 Java NIO 技术的 TCP/UDP 应用程序开发、串口通讯程序(只在最新的预览版中提供),MINA 所支持的功能也在进一步的扩展中。供大家一起共同分享学习。
在这个实例中,我们将深入探讨Socket服务器和客户端的通信代码实现,以及在编写此类代码时的一些关键技巧。 首先,让我们从Socket的基本概念开始。Socket在操作系统层面是网络通信的一个接口,它允许两个程序通过...
在本案例中,如果选择将分享点击量写入文件,可以使用Java的IO或NIO库。例如,使用`FileWriter`或`BufferedWriter`进行写操作,确保数据的正确写入和同步。而如果使用NIO,可以利用通道(Channel)和缓冲区(Buffer...
Java动态编译加载代码分享知识点 Java动态编译加载代码分享是Java编程中的一种重要技术,能够动态编译加载Java代码,实现灵活的代码管理和执行。下面是相关的知识点: 1. JavaCompiler类:JavaCompiler类是Java...
在本Java项目开发实用案例中,我们关注的重点是"第2章代码",这章主要涉及的是一个"电子相册系统"的实现。这个系统旨在提供一个用户友好的平台,用于存储、管理和分享个人照片。通过这个项目,我们可以深入学习Java...
10. **设计模式**:作为软件工程的精华,设计模式在提高代码可读性和可维护性方面至关重要,书中可能讲解了一些常见的设计模式,并通过案例进行演示。 《www.pudn.com.txt》这个文件可能是从Pudn网站下载的资源,...
该压缩包文件“基于Java的实例源码-仿千千静听音乐播放器源代码.zip”包含了一个使用Java编程语言实现的音乐播放器项目,它模仿了著名的千千静听音乐播放器的功能和界面。这个项目对于学习Java GUI设计、音频处理...
Java P2P(对等网络)技术是一种分布式通信模型,其中每个节点既是客户端也是服务器,可以互相分享资源和服务。在Java中实现P2P技术,需要深入理解网络编程、多线程、数据传输以及文件共享等相关知识。本资料集包含...
12. **IO与NIO**:Java的IO流和非阻塞I/O(New IO)在处理文件和网络通信时不可或缺。 13. **JSON处理**:Gson或Jackson库可能被用来序列化和反序列化JSON数据。 14. **日志系统**:如Log4j或SLF4J,用于记录应用...