- 浏览: 832548 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (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 2048<div class="iteye-blog- ... -
ubuntu下MySQL用source命令导入sql文件出现乱码解决方法
2012-11-18 23:46 1492首先建立数据库的时候指明数据库编码如: CREA ... -
RandomAccessFile
2012-10-18 18:16 947public void run() { try { ... -
java中多种方式读文件
2012-10-18 16:53 935java中多种方式读文件一、多种方式读文件内容。1、按字节读取 ... -
FileChannelMain
2012-10-15 18:12 1081package scan; import java ... -
Apache FtpServer在64位系统下服务不能启动解决方法
2012-06-10 21:29 6810Apache FTPServer是一款用Java开发的 ... -
Java 集合类
2012-06-07 22:03 1590Java 集合类 1. 为什么要了解J ... -
short、int、long与byte之间的转换工具类
2012-05-31 11:05 4480/** * 各基础类型与byte之间的转换 * ... -
Linux Mint 13 配置JAVA 环境
2012-05-24 22:35 26230.1--下载 JAVA ... -
FatJar+Exe4j+Inno Setup 生成可执行的exe文件
2012-04-17 10:54 14321、fatjar 是Eclipse的一个免费的插件。它的 ... -
JPanel JTextField add Focus 获取焦点解决方案
2012-03-30 21:29 2982public class TabPagePanel ex ... -
JList List<E> Page 分页
2012-03-30 21:28 1735package view.retrieve.comps. ... -
JButton setAction的BUG
2012-03-23 10:53 1280今天在使用JButton的时候,想用setText()setI ... -
自定义JTabbedPane皮肤
2012-03-22 12:05 4715package ui; import java.awt. ... -
两个工具类
2012-03-17 21:27 870package 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 1291Invalid command: InetLoad::load ... -
NIO: High Performance File Copying
2012-03-01 17:25 1160In a previous tip, I discussed ... -
自定义JList
2012-02-03 15:39 779自定义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上的程序修改而成
java NIO 高性能 socket通讯,服务端采用单线程,降低了cpu的压力,普通io socket通讯,server需要每个连接运行个线程,容易出现问题,效率也低
信息来自http://ifeve.com/server-socket-channel/ Java NIO: Channels and Buffers(通道和缓冲区) 标准的IO基于字节流和字符流进行操作的,而NIO是基于通道(Channel)和缓冲区(Buffer)进行操作,数据总是从...
本篇文章主要介绍了Java使用NioSocket手动实现HTTP服务器,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
client多线程请求server端,server接收client的名字,并返回Hello!+名字的字符格式给client。当然实际应用并不这么简单,实际可能是访问文件或者数据库获取信息返回给client。非阻塞的NIO有何神秘之处?直接上代码...
Java NIO非堵塞应用通常适用用在I/O读写等方面,我们知道,系统运行的性能瓶颈通常在I/O读写,包括对端口和文件的操作上,过去,在打开一个I/O通道后,read()将一直等待在端口一边读取字节内容,如果没有内容进来,...
JAVA服务器基于JAVA NIO I. 实现HTTP协议 II. 实现HTTPS协议 III. 实现FASTCGI协议(Client端) 运行HTTP/HTTPS服务器 运行开发包下jar文件 java -jar http-server-version-{version}.jar ...
import java.nio.channels.SocketChannel; import java.util.Iterator; import com.nio.user.ClientUser; import com.nio.user.ClientUserManager; import com.nio.user.UserData; public class NIOClient { ...
mina简单示例,Apache Mina Server 是一个网络通信应用框架,也就是说,它主要是对基于TCP/IP、UDP/IP协议栈的通信框架(当然,也可以提供JAVA 对象的序列化服务、虚拟机管道通信服务等),Mina 可以帮助我们快速...
封闭式Java Socket代码,提供TCP UDP 阻塞和非阻塞的方法,无需知道具体实现方式,只需要Main.java(Server)Main2.java(Client)Main(UDP)三个例程,简单建立联接。SocketIO接口提供精简化的方法,一体化输入输出,...
public void newConnection(NIOSocket nioSocket) { // 可在此处添加处理事件 } public void serverSocketDied(Exception exception) { // 关闭serverSocket处理 } }...
SimpleSocketServer Java IO | NIO样本使用Java IO和NIO设置自己的Socket Server(待办事项) 深入了解Tomcat和Jetty的实现方式(希望如此)
Apache Mina Server 是一个网络通信应用框架,也就是说,它主要是对基于TCP/IP、UDP/IP协议栈的通信框架(当然,也可以提供JAVA 对象的序列化服务、虚拟机管道通信服务等),Mina 可以帮助我们快速开发高性能、高...
Apache Mina Server 是一个网络通信应用框架,也就是说,它主要是对基于 TCP/IP、UDP/IP协议栈的通信...学习本文档,需要你已掌握 JAVA IO、JAVA NIO、JAVA Socket、JAVA 线程及并发库(java.util.concurrent.*)的知识。
在该项目中,我使用java选择器接口来实现一个简单的Nio Server。 用 运行src/main/scala/test/Server.Scala ,您在localhost:1237中运行服务器。 然后运行src/main/java/test/SocketClientExample.java ,运行与...
Netty是基于Java NIO client-server的网络应用框架,使用Netty可以快速开发网络应用
Socket 通信是 Client/Server 模型 而网络通信的本质是网络间的数据 IO,这又牵扯出了 BIO 和 NIO这两个通讯模型: 2. IO通讯模型 只要有 IO,就会有阻塞或非阻塞的问题,无论这个 IO 是网络的,还是硬盘的。原因...
The directory <Java home>/sample/nio/chatserver/ contains samples that demonstrate the new APIs contained in the java.nio.file package. The directory <Java home>/demo/nio/zipfs/ contains samples that...