分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > IT知识

使用nio实现web服务器

发布时间:2023-09-06 02:06责任编辑:白小东关键词:web服务器
package com.nio;import java.io.IOException;import java.net.InetAddress;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.util.Date;import java.util.Iterator;import java.util.Set;public class NIOServer { ???public static void main(String[] args) throws IOException, InterruptedException { ???????Selector selector = Selector.open(); ???????ServerSocketChannel serverSocketChannel = ServerSocketChannel.open(); ???????InetSocketAddress address = new InetSocketAddress("127.0.0.1", 8080); ???????serverSocketChannel.socket().bind(address); ???????serverSocketChannel.configureBlocking(false); ???????serverSocketChannel.register(selector, SelectionKey.OP_ACCEPT); ???????String content=""; ???????while (true) { ???????????if (selector.select() > 0) { ???????????????Set<SelectionKey> selectionKeys = selector.selectedKeys(); ???????????????Iterator<SelectionKey> it = selectionKeys.iterator(); ???????????????while (it.hasNext()) { ???????????????????SelectionKey selectionKey = it.next(); ???????????????????if (selectionKey.isAcceptable()) { ???????????????????????serverSocketChannel = (ServerSocketChannel)selectionKey.channel(); ???????????????????????SocketChannel socketChannel = serverSocketChannel.accept(); ???????????????????????socketChannel.configureBlocking(false); ???????????????????????socketChannel.register(selector, SelectionKey.OP_READ|SelectionKey.OP_WRITE); ???????????????????????System.out.println("Connected: " + socketChannel.socket().getRemoteSocketAddress()); ???????????????????} else if (selectionKey.isReadable()) { ???????????????????????SocketChannel socketChannel = (SocketChannel) selectionKey.channel(); ???????????????????????ByteBuffer buffer = ByteBuffer.allocate(1024); ???????????????????????String msg=""; ???????????????????????while (socketChannel.read(buffer) > 0) { ???????????????????????????buffer.flip(); ???????????????????????????byte[] dis = new byte[buffer.limit()]; ???????????????????????????buffer.get(dis); ???????????????????????????content+=new String(dis); ???????????????????????????buffer.flip(); ?msg+=new String(dis); ???????????????????????????System.out.println("当前线程="+Thread.currentThread().getId()+"--"+new String(dis)); ???????????????????????} ???????????????????????socketChannel.write(ByteBuffer.wrap((new Date()).toString().getBytes())); ???????????????????????socketChannel.close(); ???????????????????} ???????????????????else ?if (selectionKey.isWritable()){// ???????????????????????String msg="";// ???????????????????????SocketChannel ?socketChannel=(SocketChannel)selectionKey.channel();//// ???????????????????????socketChannel.write(ByteBuffer.wrap(("abc001"+msg).getBytes()));// ???????????????????????socketChannel.close(); ???????????????????} ???????????????????it.remove(); //若不删除,下次执行到selector.select 会持续返回0 造成 死循环 ???????????????} ???????????} ???????????Thread.sleep(100); ???????} ???}}

使用nio实现web服务器

原文地址:https://www.cnblogs.com/tiancai/p/9388907.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved