public class SelectorServiceDemo {
public static void main(String[] args) throws IOException {
int port = 8000;
Selector selector = Selector.open();
ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();
serverSocketChannel.configureBlocking(false);
ServerSocket serverSocket = serverSocketChannel.socket();
InetSocketAddress address = new InetSocketAddress(port);
serverSocket.bind(address);
serverSocketChannel.register(selector,SelectionKey.OP_ACCEPT);
System.out.println("服务器,端口:"+port);
ByteBuffer byteBuffer = ByteBuffer.allocate(1024);
while (true){
if ((selector.select())>0){
Set<SelectionKey>selectionKeys = selector.selectedKeys();
Iterator<SelectionKey>iter = selectionKeys.iterator();
while (iter.hasNext()){
SelectionKey key = iter.next();
if (key.isAcceptable()){
acceptable(selector,byteBuffer,key);
}else if (key.isReadable()&& key.isValid()){
reabable(selector,byteBuffer,key);
}else if (key.isWritable() && key.isValid()){
writable(selector,byteBuffer,key);
}
}
//清除全部的key
selectionKeys.clear();
}
}
}
private static void writable(Selector selector, ByteBuffer byteBuffer, SelectionKey key) throws IOException {
SocketChannel client = (SocketChannel) key.channel();
byteBuffer.clear();
// 向缓冲区中设置内存
byteBuffer.put(("欢迎进入NIO学习").getBytes());
byteBuffer.flip();
// 输入内容
client.write(byteBuffer);
client.register(selector,SelectionKey.OP_READ);
}
private static void reabable(Selector selector, ByteBuffer byteBuffer, SelectionKey key) throws IOException {
SocketChannel client = (SocketChannel) key.channel();
byteBuffer.clear();
//读取内容到缓冲区
int readSiza = client.read(byteBuffer);
if (readSiza >0){
System.out.println("服务器接受客服端数据"+new String(byteBuffer.array(),0,readSiza));
client.register(selector,SelectionKey.OP_WRITE);
}
}
private static void acceptable(Selector selector, ByteBuffer byteBuffer, SelectionKey key) throws IOException {
ServerSocketChannel server = (ServerSocketChannel) key.channel();
SocketChannel client = server.accept();
client.write(byteBuffer);;
client.register(selector,SelectionKey.OP_READ);
}
}
服务端 (代码Java)
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 参考官方github代码例子:https://github.com/grpc/grpc-java/tree/mas...
- 让java变成脚本语言 - Ken-专注后端技术 - ITeye技术网站http://janeky.iteye.c...
- 最近折腾了一下文件上传的方法,网上虽然有不少封装好的,但是基于RxJava2+Retrofit 带上传进度的还没有...