Java NIO:在网络编程中的基本范式

在我的专栏Java NIO中,已经简单的完成了对Java NIO的基本学习,本篇将完成一个Server - Client的完整示例,演示一下学习成果,对Java NIO在网络编程中的应用做一个总结

服务端:

package com.leolee.nio;

import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
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.nio.charset.Charset;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.UUID;

/**
 * @ClassName NIOServerTest
 * @Description: 客户端服务端完整测试——模拟简单群聊,服务端单端口监听
 * @Author LeoLee
 * @Date 2020/9/23
 * @Version V1.0
 **/
public class NIOServerTest {

    //该map维护通道的唯一标识和通道对象本身
    private Map<String, SocketChannel> clientChannelMap = new HashMap<>();

    public void buildServer () throws IOException {

        //服务端初始化
        ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();
        serverSocketChannel.configureBlocking(false);//非阻塞模式(异步模式)
        ServerSocket serverSocket = serverSocketChannel.socket();
        serverSocket.bind(new InetSocketAddress("127.0.0.1", 8899));

        //构建selector
        Selector selector = Selector.open();
        serverSocketChannel.register(selector, SelectionKey.OP_ACCEPT);

        //开始阻塞代码,进行请求监听
        while (true) {
            try {
                //开始监听selector中“感兴趣事件”的通道
                int number = selector.select();
                Set<SelectionKey> selectionKeys = selector.selectedKeys();
                selectionKeys.forEach(selectionKey -> {
                    //对应客户端的Channel,服务端通过此channel和客户端联系
                    final SocketChannel clientSocketChannel;

                    //开始判断SelectionKey的事件类型
                    if (selectionKey.isAcceptable()) {//客户端请求服务端,建立连接请求
                        //获取当前事件发生的通道,ServerSocketChannel的作用就是帮助服务端和客户端建立连接
                        ServerSocketChannel serverSocke
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值