Mina使用总结(三)MinaClient

简单的Mina客户端代码MinaSimpleClient.java:

复制代码
package com.bypay.mina.client;

import java.net.InetSocketAddress;
import java.nio.charset.Charset;
import org.apache.mina.core.future.ConnectFuture;
import org.apache.mina.core.session.IoSession;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.transport.socket.nio.NioSocketConnector;
import com.bypay.mina.handler.ClientTimerHandler;

/**
 * Mina客户端
 * @author 唐延波
 * @date 2015-1-20
 *
 */
public class MinaSimpleClient {

    private static String HOSTNAME = "localhost";

    private static int PORT = 9123;

    /**
     * @author 唐延波
     * @throws InterruptedException
     * @date 2014-11-4
     */
    public static void main(String[] args) throws InterruptedException {
        NioSocketConnector connector = new NioSocketConnector();
        //设置编码解码器
        connector.getFilterChain().addLast("codec",new ProtocolCodecFilter(new TextLineCodecFactory(Charset
                .forName("UTF-8"))));
        
        //设置Handler
        connector.setHandler(new ClientTimerHandler());

        //获取连接,该方法为异步执行
        ConnectFuture future = connector.connect(new InetSocketAddress(
                HOSTNAME, PORT));
        
        //等待连接建立
        future.awaitUninterruptibly();
        
        //获取session
        IoSession session = future.getSession();

        //等待session关闭
        session.getCloseFuture().awaitUninterruptibly();
        
        //释放connector资源
        //实际开发中,不要频繁关闭connector,因为它是重量级资源,应该设计成单例或者连接池
        connector.dispose();

    }
}
复制代码

处理消息发送和消息接收

ClientTimerHandler.java代码:

复制代码
package com.bypay.mina.handler;

import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;

/**
 * ClientHandler
 * 
 * @author 唐延波
 * @date 2015-1-20
 * 
 */
public class ClientTimerHandler extends IoHandlerAdapter {

    @Override
    public void sessionCreated(IoSession session) throws Exception {
        // session 创建时调用
        session.write("test");
    }

    @Override
    public void messageReceived(IoSession session, Object message)
            throws Exception {
        // 异步接收消息
        String str = message.toString();
        System.out.println("接收服务端消息:" + str);
    }

    @Override
    public void exceptionCaught(IoSession session, Throwable cause)
            throws Exception {
        // 出现异常
        cause.printStackTrace();
        session.close(true);
    }

    @Override
    public void sessionIdle(IoSession session, IdleStatus status)
            throws Exception {
        // 心跳
        System.out.println("客户端ide:");
    }
}
复制代码
posted @   风过无痕的博客  阅读(2990)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示