MINA : line is too long 传递大字符串数据

服务端:

// 设置行大小
TextLineCodecFactory lineCodec=new TextLineCodecFactory(Charset.forName("UTF-8"));
lineCodec.setDecoderMaxLineLength(1024*10240); //10M
lineCodec.setEncoderMaxLineLength(1024*10240); //10M
conn.getFilterChain().addLast("codec",new ProtocolCodecFilter(lineCodec));  //行文本解析

  客服端

// 设置行大小
TextLineCodecFactory lineCodec=new TextLineCodecFactory(Charset.forName("UTF-8"));
lineCodec.setDecoderMaxLineLength(1024*10240); //10M
lineCodec.setEncoderMaxLineLength(1024*10240); //10M
conn.getFilterChain().addLast("codec",new ProtocolCodecFilter(lineCodec));  //行文本解析

 

全文



import com.alibaba.fastjson.JSONObject;
import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder;
import org.apache.mina.core.future.ConnectFuture;
import org.apache.mina.core.service.IoHandlerAdapter;
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 java.net.InetSocketAddress;
import java.nio.charset.Charset;

/**
 * @Classname MinaUtils
 * @Description MinaUtils
 * @Date 2020-02-24 14:10
 * @Created by issuser
 */
public class MinaUtils {

    public static boolean send(String hostname, int port, JSONObject json) {
        NioSocketConnector conn = new NioSocketConnector();
        DefaultIoFilterChainBuilder chain = conn.getFilterChain();
        chain.addLast("myChain",new ProtocolCodecFilter(new TextLineCodecFactory()));

        // 设置行大小
        TextLineCodecFactory lineCodec=new TextLineCodecFactory(Charset.forName("UTF-8"));
        lineCodec.setDecoderMaxLineLength(1024*10240); //10M
        lineCodec.setEncoderMaxLineLength(1024*10240); //10M
        conn.getFilterChain().addLast("codec",new ProtocolCodecFilter(lineCodec));  //行文本解析

        conn.setHandler(new MinaClientHandle());
        conn.setConnectTimeoutCheckInterval(3000);
        //连接服务器
        ConnectFuture cf = conn.connect(new InetSocketAddress(hostname, port));
        cf.awaitUninterruptibly(); //等待连接成功;
        IoSession session = cf.getSession();
        session.write(json);
        //等待服务器关闭连接 如果服务端不被关闭,则这里不会收到服务器端的关闭请求
        cf.getSession().getCloseFuture().awaitUninterruptibly();
        conn.dispose();
        return true;
    }

}

class MinaClientHandle extends IoHandlerAdapter {
    @Override
    public void sessionOpened(IoSession session) throws Exception {
        super.sessionOpened(session);
        System.out.println("已连接");
    }
    @Override
    public void sessionClosed(IoSession session) throws Exception {
        super.sessionClosed(session);
        System.out.println("已关闭");
    }
    @Override
    public void messageReceived(IoSession session, Object message) throws Exception {
        super.messageReceived(session, message);
        System.out.println("服务器返回消息:"+message);
    }
}

 

package com.isstech;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import org.apache.mina.filter.codec.textline.TextLineDecoder;
import org.junit.Test;

import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder;
import org.apache.mina.core.future.ConnectFuture;
import org.apache.mina.core.service.IoHandlerAdapter;
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 java.net.InetSocketAddress;
import java.nio.charset.Charset;
import java.util.Scanner;
import java.util.UUID;

/**
 * @Classname MinaTest
 * @Description TODO
 * @Date 2020-02-24 13:28
 * @Created by issuser
 */
public class MinaTest {

    @Test
    public void maintest() throws Exception {
        String hostname = "127.0.0.1";
        int port = 8124;
        NioSocketConnector conn = new NioSocketConnector();
        DefaultIoFilterChainBuilder chain = conn.getFilterChain();
        chain.addLast("myChain",new ProtocolCodecFilter(new TextLineCodecFactory()));

        // 设置行大小
        TextLineCodecFactory lineCodec=new TextLineCodecFactory(Charset.forName("UTF-8"));
        lineCodec.setDecoderMaxLineLength(1024*10240); //10M
        lineCodec.setEncoderMaxLineLength(1024*10240); //10M
        conn.getFilterChain().addLast("codec",new ProtocolCodecFilter(lineCodec));

        conn.setHandler(new MinaClientHandle());
        conn.setConnectTimeoutCheckInterval(3000);

        //连接服务器
        ConnectFuture cf = conn.connect(new InetSocketAddress(hostname, port));
        cf.awaitUninterruptibly();

//        acceptor.getSessionConfig().setReadBufferSize(1024*1024);//发送缓冲区1M
//        acceptor.getSessionConfig().setReceiveBufferSize(1024*1024);//接收缓冲区1M

        IoSession session = cf.getSession();
//        Scanner input = new Scanner(System.in);
//        while (true){
            System.out.println("输入消息");
//            String msg = input.nextLine();
            String msg = UUID.randomUUID().toString();
            JSONObject json = new JSONObject();
//            json.put("msg", msg);
//            json.put("file_id", "123456");
            String data = "{\"param_data\":{\"other\":\"other\",\"alarmTime\":\"1582277663260\"}," +
                    "\"id\":\"074601#32d350edd584\",\"imageBase64Bodys\":\"bm9GaWxl\"}";
            json = JSON.parseObject(data);
            // data:image/jpg;base64,
            json.put("imageBase64Bodys", "iVBORw0KGgoAAAANSUhmCC");
            session.write(json);
//        }
        //如果服务端不被关闭,则这里不会收到服务器端的关闭请求
        cf.getSession().getCloseFuture().awaitUninterruptibly();
        conn.dispose();
    }
}


class MinaClientHandle extends IoHandlerAdapter {
    @Override
    public void sessionOpened(IoSession session) throws Exception {
        super.sessionOpened(session);
        System.out.println("连接");
    }
    @Override
    public void sessionClosed(IoSession session) throws Exception {
        super.sessionClosed(session);
        System.out.println("关闭");
    }
    @Override
    public void messageReceived(IoSession session, Object message) throws Exception {
        super.messageReceived(session, message);
        System.out.println("服务器:"+message);
    }
}

 

你可能感兴趣的:(mina)