NIO例子:非阻塞服务器(Non block server ) |
|
import
java.io.IOException;
import
java.nio.ByteBuffer;
import
java.nio.CharBuffer;
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.nio.charset.CharsetDecoder;
import
java.nio.charset.CharsetEncoder;
import
java.util.Iterator;
import
java.util.Set;
public class
MainClass
{
public static
void
main
(
String
[]
args
)
throws
IOException
{
Charset charset = Charset.forName
(
"ISO-8859-1"
)
;
CharsetEncoder encoder = charset.newEncoder
()
;
CharsetDecoder decoder = charset.newDecoder
()
;
ByteBuffer buffer = ByteBuffer.allocate
(
512
)
;
Selector selector = Selector.open
()
;
ServerSocketChannel server = ServerSocketChannel.open
()
;
server.socket
()
.bind
(
new
java.net.InetSocketAddress
(
8000
))
;
server.configureBlocking
(
false
)
;
SelectionKey serverkey = server.register
(
selector, SelectionKey.OP_ACCEPT
)
;
for
(
;;
) {
selector.select
()
;
Set keys = selector.selectedKeys
()
;
for
(
Iterator i = keys.iterator
()
; i.hasNext
()
;
) {
SelectionKey key =
(
SelectionKey
)
i.next
()
;
i.remove
()
;
if
(
key == serverkey
) {
if
(
key.isAcceptable
()) {
SocketChannel client = server.accept
()
;
client.configureBlocking
(
false
)
;
SelectionKey clientkey = client.register
(
selector, SelectionKey.OP_READ
)
;
clientkey.attach
(
new
Integer
(
0
))
;
}
}
else
{
SocketChannel client =
(
SocketChannel
)
key.channel
()
;
if
(
!key.isReadable
())
continue
;
int
bytesread = client.read
(
buffer
)
;
if
(
bytesread == -
1
) {
key.cancel
()
;
client.close
()
;
continue
;
}
buffer.flip
()
;
String request = decoder.decode
(
buffer
)
.toString
()
;
buffer.clear
()
;
if
(
request.trim
()
.equals
(
"quit"
)) {
client.write
(
encoder.encode
(
CharBuffer.wrap
(
"Bye."
)))
;
key.cancel
()
;
client.close
()
;
}
else
{
int
num =
((
Integer
)
key.attachment
())
.intValue
()
;
String response = num +
": "
+ request.toUpperCase
()
;
client.write
(
encoder.encode
(
CharBuffer.wrap
(
response
)))
;
key.attach
(
new
Integer
(
num +
1
))
;
}
}
}
}
}
}
|
相关推荐
Java-NIO非阻塞服务器示例.docx
Java NIO非阻塞服务器示例.docx
JavaNIO非阻塞服务器示例.pdf
postgres-nio::elephant:用于PostgreSQL非阻塞,事件驱动的Swift客户端
基于JavaNIO的非阻塞通信的研究与实现
由于React堆线程可以在执行IO时饱和,因此nioreactor使用接受器线程将新连接转发到可以在非阻塞模式下处理读取和写入的React堆池。 建筑分布 要求 2.2.0或以上 Java 8或以上 建立: git clone mvn clean install ...
nio 的实现例子 里面有详细的中文注释 配合查询api 帮助你更好地学习nio 特点:非阻塞
实现java nio的标准例子,包括server端和client端。
实现功能:基于HTTP协议,解析请求和拼接响应,基于NIO的非阻塞,线程池,文件传输。代码有详细注释和清晰的框架。 程序入口是: /HttpServerReactor/src/com/StartServer.Java 访问1,浏览:...
Java NIO非阻塞服务端与客户端相互通信 每行代码都有注释, 看完后,会让你对非阻塞有一清楚的认识.
用java编写的nio通信的例子,nio是io编程的新版本,比io较流行。同时本例子是适用socket通信的。可以在此基础上,添加您的个人应用。本例子适用于:java通信的学习者,android平台通信的学习者。
用nio想的一个不阻塞NIOSocket例子.。。希望对阁下有用
jdk供的无阻塞I/O(NIO)有效解决了多线程服务器存在的线程开销问题,但在使用上略显得复杂一些。在NIO中使用多线程,主要目的已不是为了应对每个客户端请求而分配独立的服务线程,而是通过多线程充分使用用多个CPU...
一个简单的javaNIO非阻塞的聊天小demo,支持单聊和群聊
Java编写的简易聊天工具,使用NIO实现非阻塞socket通信,使用Java原生sdk实现,可以运行。
这是一个用java NIO 实现的简单多线程服务器有客户端例子,仅供学习参考。
一个java NIO的例子 有很详细的每一步的描述,很好去理解
使用Java NIO编写高性能的服务器
Java NIO: Non-blocking IO(非阻塞IO) Java NIO可以让你非阻塞的使用IO,例如:当线程从通道读取数据到缓冲区时,线程还是可以进行其他事情。当数据被写入到缓冲区时,线程可以继续处理它。从缓冲区写入通道也...
今天我们继续就Android DDMS源码一起分析NIO非阻塞通讯方式,Android123也会给大家分享下手机和PC互通中的一些技术