- 浏览: 854126 次
- 性别:
- 来自: 深圳
-
文章分类
- 全部博客 (379)
- struts (5)
- hibernate (16)
- spring (16)
- ssh (20)
- MySQL (16)
- 数据库脚本 (2)
- DownLoad (1)
- GAE (5)
- Java (103)
- LoadRunner (2)
- VF (1)
- 学习资料 (24)
- 软件使用 (21)
- 通信类 (4)
- 生活 (3)
- J2ME (1)
- 心理学 (1)
- Linux (26)
- Android (3)
- Oracle (1)
- 面向对象概念&面试准备 (11)
- ExtJs (2)
- Google Map (1)
- Flex (47)
- 算法研究 (1)
- share (20)
- python (1)
- MongoDB (7)
- centos6 (13)
- C++ (8)
- DB2 (3)
- C# (1)
- 代码片段 (24)
- Lucene (2)
- php (1)
- NodeJS (1)
- Express (1)
最新评论
-
shua1991:
已阅,我表示同意。
Eclipse统计代码行数 -
nakedou:
写的不错,挺详细的
在CentOS中使用 yum 安装MongoDB及服务器端配置 -
sjp524617477:
好方法
Eclipse统计代码行数 -
simpletrc:
<script>ale ...
Java写到.txt文件,如何实现换行 -
csdn_zuoqiang:
Apache Ftp Server,目前是1.0.4,非常好的 ...
Apache FtpServer在64位系统下服务不能启动解决方法
import java.net.InetSocketAddress; import java.nio.ByteBuffer; import java.nio.channels.SelectionKey; import java.nio.channels.Selector; import java.nio.channels.ServerSocketChannel; import java.nio.channels.SocketChannel; import java.nio.charset.Charset; import java.util.Iterator; import config.ServerConfig; /** * NIO 非阻塞 服务器 * @author zhangzuoqiang * <br/>Date: 2011-3-5 */ public class NIOServer { public static void main(String[] args) throws Exception{ // 创建本地Socket信道.并设为非阻塞方式 ServerSocketChannel serverChannel = ServerSocketChannel.open(); serverChannel.socket().bind(new InetSocketAddress(ServerConfig.LISTENNING_PORT)); serverChannel.configureBlocking(false); // 创建选择器(异步 I/O 中的核心对象),并将其注册到serverChannel Selector selector = Selector.open(); serverChannel.register(selector, SelectionKey.OP_ACCEPT);//监听 accept 事件 while (true) { if (selector.select(ServerConfig.CONNECT_TIMEOUT) == 0) { System.out.println("waiting..."); continue; } // 获得就绪信道的键迭代器 Iterator<SelectionKey> keyIter = selector.selectedKeys().iterator(); // 使用迭代器遍历就绪信道 while (keyIter.hasNext()) { SelectionKey key = keyIter.next(); // 若有客户端连接,则准备一个clientChannel与之通信 if (key.isAcceptable()) { SocketChannel clientChannel = ((ServerSocketChannel)key.channel()).accept(); clientChannel.configureBlocking(false); clientChannel.register(key.selector(), SelectionKey.OP_READ, ByteBuffer.allocate(ServerConfig.BUFFER_SIZE)); } try { // 客户端有写入时 if (key.isReadable()) { // 获得与客户端通信的信道 SocketChannel clientChannel = (SocketChannel)key.channel(); // 得到并重置缓冲区的主要索引值 ByteBuffer buffer = (ByteBuffer)key.attachment(); buffer.clear(); // 读取信息获得读取的字节数 long bytesRead = clientChannel.read(buffer); if(bytesRead == -1){// 没有读取到内容的情况 clientChannel.close(); }else{ // 将缓冲区准备为数据传出状态 buffer.flip(); // 将获得字节字符串(使用Charset进行解码) String receivedString = Charset.forName(ServerConfig.LOCAL_CHARSET).newDecoder().decode(buffer).toString(); System.out.println("接收到信息:" + receivedString); //接收到客户端的请求之后,将策略文件发送出去 if(receivedString.indexOf("<policy-file-request/>") >=0){ String policyStr = ServerConfig.POLICY_XML + "\0"; buffer = ByteBuffer.wrap(policyStr.getBytes(ServerConfig.LOCAL_CHARSET)); clientChannel.write(buffer); } // 准备发送的文本 String sendString = "你好,客户端. 已经收到你的信息" + receivedString; // 将要发送的字符串编码(使用Charset进行编码)后再进行包装 buffer = ByteBuffer.wrap(sendString.getBytes(ServerConfig.LOCAL_CHARSET)); // 发送回去 clientChannel.write(buffer); // 设置为下一次读取或是写入做准备 key.interestOps(SelectionKey.OP_READ | SelectionKey.OP_WRITE); } } } catch (Exception e) { // TODO: 当客户端在读取数据操作执行之前断开连接会产生异常信息 e.printStackTrace(); //将本socket的事件在选择器中删除 key.cancel(); break; }finally{ // 删除处理过的 SelectionKey keyIter.remove(); } } } } }
发表评论
-
微信JS
2013-10-26 21:17 2126<div class="iteye-blog- ... -
ubuntu下MySQL用source命令导入sql文件出现乱码解决方法
2012-11-18 23:46 1627首先建立数据库的时候指明数据库编码如: CREA ... -
RandomAccessFile
2012-10-18 18:16 1015public void run() { try { ... -
java中多种方式读文件
2012-10-18 16:53 1010java中多种方式读文件一、多种方式读文件内容。1、按字节读取 ... -
FileChannelMain
2012-10-15 18:12 1135package scan; import java ... -
Apache FtpServer在64位系统下服务不能启动解决方法
2012-06-10 21:29 6972Apache FTPServer是一款用Java开发的 ... -
Java 集合类
2012-06-07 22:03 1948Java 集合类 1. 为什么要了解J ... -
short、int、long与byte之间的转换工具类
2012-05-31 11:05 4562/** * 各基础类型与byte之间的转换 * ... -
Linux Mint 13 配置JAVA 环境
2012-05-24 22:35 26880.1--下载 JAVA ... -
FatJar+Exe4j+Inno Setup 生成可执行的exe文件
2012-04-17 10:54 14881、fatjar 是Eclipse的一个免费的插件。它的 ... -
JPanel JTextField add Focus 获取焦点解决方案
2012-03-30 21:29 3056public class TabPagePanel ex ... -
JList List<E> Page 分页
2012-03-30 21:28 1786package view.retrieve.comps. ... -
JButton setAction的BUG
2012-03-23 10:53 1331今天在使用JButton的时候,想用setText()setI ... -
自定义JTabbedPane皮肤
2012-03-22 12:05 4770package ui; import java.awt. ... -
两个工具类
2012-03-17 21:27 918package com.retrieve.utils; ... -
两个工具类
2012-03-17 21:27 0package com.retrieve.utils; ... -
mysql、sqlserver、oracle分页,java分页统一接口实现
2012-03-13 17:56 0定义: pageStart 起始页,pageEnd 终止页, ... -
Invalid command: InetLoad::load
2012-03-06 16:41 1414Invalid command: InetLoad::load ... -
NIO: High Performance File Copying
2012-03-01 17:25 1229In a previous tip, I discussed ... -
自定义JList
2012-02-03 15:39 832自定义JList。
相关推荐
Ioserver java Nio socket 框架 是个不错的NIO 通讯框架,本来想学习mina框架,看了看mina的源码太头痛,本人觉得看懂了Ioserver 再看mina的框架,想多的学习 java NIO 的也可以下载 看看,很值得学习啊!!!
使用NIO socket不需要多线程来处理多个连接的请求,效率非常高 可以作为NIO socket入门的例子,Reactor模式,重点理解key.attach, jar文件里包含了源代码 1,运行server.bat启动服务器,可以打开编辑,修改端口号 ...
本例包含服务器端和客户端,多线程,每线程多次发送,Eclipse工程,启动服务器使用 nu.javafaq.server.NioServer,启动客户端使用 nu.javafaq.client.NioClient。另本例取自javafaq.nv上的程序修改而成
NioSocket是一个基于Java NIO(非阻塞I/O)技术实现的网络通信框架,它包含服务器端(Server)和客户端(Client)两部分。在Java编程中,NIO(New Input/Output)提供了一种不同于传统IO模型的I/O操作方式,其核心...
首先,我们来看`NioServer.java`。这个文件中包含了一个基于NIO的服务器端实现。服务器的核心组件是`Selector`,它允许一个单独的线程监听多个套接字通道的状态变化。当客户端发起连接请求时,服务器会注册`...
在Java编程领域,Socket是网络通信的基础,它允许两个或多个应用程序通过TCP/IP协议进行数据交换。本篇文章将深入探讨如何使用Java NIO(非阻塞I/O)来实现阻塞多线程通信,这对于高性能服务器端应用尤其重要。我们...
NioSocket是Java的New I/O(Non-blocking I/O)API,提供了非阻塞式的I/O操作,可以提高服务器的性能和可扩展性。 在这个示例中,我们首先创建了一个ServerSocketChannel,用于监听客户端的请求。然后,我们将...
在"socket通信NIO代理模式demo实例"中,你可以找到具体的代码实现,包括`Server`端和`Client`端的逻辑,以及如何使用`Selector`进行事件监听。通过对这个示例的学习,你可以深入理解NIO在代理模式中的应用,并能灵活...
标题中提到的"java_Nio_server_and_j2me_client.rar"是一个包含Java NIO服务器和J2ME客户端的应用示例。J2ME(Java Micro Edition)是Java平台的一个子集,主要用于移动设备和嵌入式设备。在这个项目中,NIO服务器...
### Java NIO原理 图文分析及代码实现 #### 前言 在深入探讨Java NIO之前,我们先简要回顾一下NIO的概念及其引入的原因。随着互联网的发展,越来越多的应用程序需要处理高并发的网络连接请求。传统的阻塞I/O模型在...
在给定的部分代码示例中,可以看到一个简单的Java IO Echo Server实现。这个例子展示了如何使用传统的Java IO来实现一个服务器端的应用程序,它可以接收客户端发送的消息,并将接收到的信息原样返回给客户端。这里...
例如,可能有一个名为`NioServer`的主类,用于初始化ServerSocketChannel,注册选择器,以及处理接收到的连接和数据。还有可能包含`ThreadPool`类,用于管理线程池,以及`BufferHandler`类,负责处理缓冲区中的数据...
client多线程请求server端,server接收client的名字,并返回Hello!+名字的字符格式给client。当然实际应用并不这么简单,实际可能是访问文件或者数据库获取信息返回给client。非阻塞的NIO有何神秘之处?直接上代码...
本示例将详细解析如何使用Java的非阻塞I/O(NIO)实现Socket通信,包括客户端发送消息和服务器端接收消息的过程。 首先,理解NIO(Non-blocking Input/Output)的概念至关重要。NIO与传统的IO模型不同,它提供了对...
4. **NIO(非阻塞I/O)**:Java NIO库提供了非阻塞的I/O操作,适用于高并发的Socket通信场景。 5. **缓冲区管理**:使用ByteBuffer等NIO类可以更有效地管理内存缓冲区,提高性能。 以上内容只是Java Socket编程的...
在Java世界中,网络编程是一个不可或缺的部分,而Mina NIO(Non-blocking I/O)Socket库则是Java开发者实现高性能、高并发网络服务的重要工具。本文将深入探讨Mina NIO Socket的核心概念、工作原理以及在实际项目中...
- `Selector`和`SelectableChannel`是Java NIO的一部分,可用于高效地监控多个Socket通道的状态。 通过以上步骤,你可以构建一个简单的基于Socket的QQ聊天模拟器。然而,实际的QQ客户端和服务器会涉及到更复杂的...
在Java Socket编程中,我们还可以使用NIO(Non-blocking I/O)进行更高效的并发处理。NIO提供了选择器(Selector)和通道(Channel)等机制,可以在单线程下处理多个Socket连接,提高了系统资源的利用率。 另外,`...
Java NIO(New IO)是Java 1.4版本引入的一个新特性,它提供了一种新的方式来处理I/O操作,相比传统的IO模型,NIO具有更好的性能和更高的效率。Selector是Java NIO中的核心组件之一,它允许单个线程处理多个通道...