NIO 简易版聊天室

1. server端:

package com.niewj.niochat;import java.io.IOException;import java.net.InetSocketAddress;import java.nio.ByteBuffer;import java.nio.channels.*;import java.util.Iterator;import java.util.Set;/** * Created by niewj on 2020/9/22 15:18 */public class NioChatServer {    public static final int PORT = 7777;    public static final int BUF_SIZE = 512;    private Selector selector;    private ServerSocketChannel serverChannel;    public static void main(String[] args) throws IOException {        NioChatServer server = new NioChatServer();        server.init();        server.listen();    }    private void listen() throws IOException {        // 关联胜利后 轮询监听客户端连贯        while (true) {            // 阻塞办法: 直到有注册的事件产生            int readyChannels = selector.select();            if (readyChannels == 0) {                continue;            }            // 收集监听的事件            Set<SelectionKey> keys = selector.selectedKeys();            Iterator<SelectionKey> iter = keys.iterator();            while (iter.hasNext()) {                SelectionKey key = iter.next();                if (key.isAcceptable()) {                    // 解决-accept事件                    handleAcceptable(key);                }                if (key.isReadable()) {                    // 解决-read 事件                    readDataFromSocket(key);                }                /** 留神每次 iter.remove():                 * Selector不会本人移除SelectionKey实例, 必须在解决完Channel时本人移除。                 * 下次该通道就绪时,Selector会再次将其放入已选择键集中。 */