NIO服务端客户端编写

1.Server

import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.channels.SelectionKey;
import java.nio.channels.Selector;
import java.nio.channels.ServerSocketChannel;
import java.util.Iterator;
import java.util.Set;

public class NioServer {

    public static void main(String[] args) throws IOException {
        //创建服务器
        ServerSocketChannel server = ServerSocketChannel.open();//打开一个服务器
        //绑定地址
        server.bind(new InetSocketAddress(6666));//非阻塞的方法
        //配置成非阻塞式的channel
        server.configureBlocking(false);
        //此外需要一个IO多路复用器
        Selector selector = Selector.open();

        //注册channel到selector上去
        server.register(selector, SelectionKey.OP_ACCEPT);//关注连接操作选项

        while (true){
            //选择器进行系统调用,返回值代表发生事件的个数
            //0表示超时,-1表示错误
            int select = selector.select();//这个方法可以设置超时时间
            //如果不设置超时时间,那么这个方***一直在这里阻塞
            //System.out.println(select);

            //由于select()方法是阻塞的,程序执行到此处时就代表有事件发生;
            Set<SelectionKey> selectionKeys = selector.selectedKeys();

            //前面拿到了所有产生了事件的集合,于是就可以使用迭代器遍历
            Iterator<SelectionKey> iterator = selectionKeys.iterator();
            while (iterator.hasNext()){
                SelectionKey selectionKey = iterator.next();
                //主要的点,关注的事情一旦处理完成了,就是用迭代器的方式删除这个事件

                //能够关注不同的事件
                if (selectionKey.isAcceptable()){
                    System.out.println("有人连接我了");
                    iterator.remove();
                }
                if (selectionKey.isReadable()){
                    System.out.println("有新的可读");
                }
            }

        }




    }
}

2、

import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.channels.SocketChannel;

public class NioClient {
    public static void main(String[] args) throws IOException, InterruptedException {
        SocketChannel client = SocketChannel.open();
        client.configureBlocking(false);
        client.connect(new InetSocketAddress(6666));

        Thread.sleep(100000);
    }
}

全部评论

相关推荐

面试官全程关摄像头1.自我介绍一下2.React和Vue哪个更熟悉一点3.你在之前那段实习经历中有没有什么技术性的突破(我只是实习了44天工作28天,我把我能说的都说了)4.你封装的哪个表单组件支不支持动态传值5.自己在实习阶段Vue3项目封装过hook吗6.hook有什么作用7.Vue2和Vue3的响应式区别(我说一个是proxy是拦截所有的底层操作,Object.defineProperty本身就是一个底层操作,有些东西拦截不了,比如数组的一些操作还有等等,面试官就说实在要拦截能不能拦截????我心想肯定不行呀,他的底层机制就不允许吧)8.pinia和vuex的区别(这个回答不出来是我太久没用了)9.pinia和zustand的区别,怎么选(直接给我干懵了)(我说react能用pinia吗&nbsp;&nbsp;他说要用的话也可以)10.渲染一万条数据,怎么解决页面卡顿问题(我说分页、监听滚轮动态加载,纯数据展示好像还可以用canvas画)(估计是没说虚拟表单,感觉不满意)11.type和interface的区别12.ts的泛型有哪些作用(我就说了一个结构相同但是类型不同的时候可以用,比如请求响应的接口,每次的data不同,这里能用一个泛型,他问我还有什么)13.你项目用的是React,如果让你再写一遍你会选择什么14.pnpm、npm、yarn的区别15.dependencies和devdependencies的区别总而言之太久没面试了,上一段实习的面试js问了很多。结果这次js一点没问,网络方面也没考,表现得很一般,但是知道自己的问题了&nbsp;&nbsp;好好准备,等待明天的影石360和周四的腾讯了&nbsp;&nbsp;加油!!!
解zj:大三的第一段面试居然是这样的结局
查看15道真题和解析
点赞 评论 收藏
分享
11-04 10:30
已编辑
门头沟学院 研发工程师
开心小狗🐶:“直接说答案”
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务