服務(wù)端 (代碼Java)

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("服務(wù)器,端口:"+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();
        // 向緩沖區(qū)中設(shè)置內(nèi)存
        byteBuffer.put(("歡迎進(jìn)入NIO學(xué)習(xí)").getBytes());
        byteBuffer.flip();

        // 輸入內(nèi)容
        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();

        //讀取內(nèi)容到緩沖區(qū)
        int readSiza = client.read(byteBuffer);
        if (readSiza >0){
            System.out.println("服務(wù)器接受客服端數(shù)據(jù)"+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);

    }


}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容