2024年最新MINA 实现聊天功能_chatdaiminaabiji(2),2024年最新HarmonyOS鸿蒙最新面试题

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!


img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上鸿蒙开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以戳这里获取

            }
        }
    }
}

}


1.SimpleChatServerHandler 继承自 [IoHandlerAdapter](https://bbs.csdn.net/topics/618636735),这个类实现了 [IoHandler](https://bbs.csdn.net/topics/618636735) 接口,IoHandlerAdapter 提供了许多事件处理的接口方法,然后你可以覆盖这些方法。现在仅仅只需要继承 IoHandlerAdapter 类而不是你自己去实现接口方法。


2.`Set<IoSession> sessions` 用来存储所有的 连接上来的 session.


3.覆盖了 sessionCreated() 事件处理方法。每当从服务端收到新的客户端连接时,客户端的 IoSession 就存入存入 sessions 列表中,并通知列表中的其他客户端 IoSession


4.覆盖了 sessionClosed() 事件处理方法。每当从服务端收到客户端断开时,客户端的 IoSession 从 sessions 列表中,并通知列表中的其他客户端 IoSession


5.覆盖了 messageReceived() 事件处理方法。每当从服务端读到客户端写入信息时,将信息广播给其他客户端的 IoSession。


6.覆盖了 sessionIdle() 事件处理方法。服务端监听到客户端闲置情况


7.exceptionCaught() 事件处理方法是当出现 Throwable 对象才会被调用,即当 MINA 由于 IO 错误或者处理器在处理事件时抛出的异常时。在大部分情况下,捕获的异常应该被记录下来并且把关联的 IoSession 给关闭掉。然而这个方法的处理方式会在遇到不同异常的情况下有不同的实现,比如你可能想在关闭连接之前发送一个错误码的响应消息。


8.broadcast() 服务器用于广播的方法


#### SimpleChatServer.java


编写一个 main() 方法来启动服务端。



public class SimpleChatServer {

public static void main(String[] args) {
    int port;
    if (args.length > 0) {
        port = Integer.parseInt(args[0]);
    } else {
        port = 8080;
    }

    SocketAcceptor acceptor = new NioSocketAcceptor(); // (1)

    acceptor.getFilterChain().addLast( "codec", 
            new ProtocolCodecFilter( new TextLineCodecFactory( Charset.forName( "UTF-8" ))));      // (2)
    acceptor.setHandler(new SimpleChatServerHandler()); // (3)

    acceptor.getSessionConfig().setReadBufferSize(2048); // (4)
    acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 100);// (5)

    try {
        acceptor.bind(new InetSocketAddress(port)); // (6)
    } catch (IOException e) {
        e.printStackTrace();
    }
    System.out.println("[Server]Listening on port " + port);
}

}


1.[NioSocketAcceptor](https://bbs.csdn.net/topics/618636735) 基于 TCP/IP 的 socket 连接。


2.[ProtocolCodecFilter](https://bbs.csdn.net/topics/618636735) 是编码和解码的过滤器链,将一个连入的 ByteBuffer 转化为消息 POJO,反之亦然。而[TextLineCodecFactory](https://bbs.csdn.net/topics/618636735)是 MINA 提供的一个编解码是,可以方便处理基于文本的协议。


3.设置在处理器为之前创建的 SimpleChatServerHandler。 


4.会话配置,设置字节缓存大小。


5.会话配置,设置闲置时间。


6.剩下的就是绑定端口然后启动服务。这里我们在机器上默认绑定了机器所有网卡上的 8080 端口。


恭喜!你已经完成了基于 MINA 聊天服务端程序。


### 客户端


#### SimpleChatClientHandler.java


客户端的处理类比较简单,只需要将读到的信息打印出来即可



public class SimpleChatClientHandler extends IoHandlerAdapter {
@Override
public void messageReceived(IoSession session, Object message) {
String str = message.toString();
System.out.println(str);
}
}


#### SimpleChatClient.java


编写一个 main() 方法来启动客户端。



public class SimpleChatClient {
private static final long CONNECT_TIMEOUT = 30 * 1000L; // 30 秒;
private static final String HOSTNAME = “127.0.0.1”;
private static final int PORT = 8080;
/**
* @param args
*/
public static void main(String[] args) {

    NioSocketConnector connector = new NioSocketConnector(); // (1)
    connector.setConnectTimeoutMillis(CONNECT_TIMEOUT);
    connector.getFilterChain().addLast( "codec", 
            new ProtocolCodecFilter( new TextLineCodecFactory( Charset.forName( "UTF-8" ))));
    connector.setHandler(new SimpleChatClientHandler());
    IoSession session;
    ConnectFuture future = connector.connect(new InetSocketAddress(
            HOSTNAME, PORT));  // (2)
    future.awaitUninterruptibly();
    session = future.getSession();

    while(true){
        try {
            BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
            session.write(in.readLine());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

}


1.[NioSocketConnector](https://bbs.csdn.net/topics/618636735) 用于 TCP/IP 连接


2.连接到指定的服务器


### 运行效果


先运行 SimpleChatServer,再可以运行多个 SimpleChatClient,控制台输入文本继续测试


![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=http%3A%2F%2F99btgc01.info%2Fuploads%2F2015%2F04%2Fs%25281%2529.jpg&pos_id=img-ej9kUU0Z-1715708095926)



![img](https://img-blog.csdnimg.cn/img_convert/836337442f4b39d4b8160e6a61ced125.png)
![img](https://img-blog.csdnimg.cn/img_convert/f8bb6bfed16d85a16d36d2020fefd266.png)

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化的资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618636735)**


**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

很难做到真正的技术提升。**

**[需要这份系统化的资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618636735)**


**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值