Java - Apache Mina 自定义协议通信

本文介绍如何在Java中利用Apache Mina框架实现自定义协议通信。通过自定义编解码器,详细讲解了从定义协议实体、编码器到运行类和连接类的实现过程。最后展示了服务器端和客户端的运行结果,并提供了相关资源链接。
摘要由CSDN通过智能技术生成

一、定义协议实体

import java.nio.charset.Charset;

/**
 * 自定义协议的消息体
 */
public class MyMsg {
	/**
	 * 消息长度
	 */
	private Integer lenth;

	/**
	 * 发送人
	 */
	private Long sender;

	/**
	 * 接收人
	 */
	private Long receiver;

	/**
	 * 消息内容
	 */
	private String content;
	
	public MyMsg() {
		
	}

	public Long getSender() {
		return sender;
	}

	public void setSender(Long sender) {
		this.sender = sender;
	}

	public Long getReceiver() {
		return receiver;
	}

	public void setReceiver(Long receiver) {
		this.receiver = receiver;
	}

	public String getContent() {
		return content;
	}

	public void setContent(String content) {
		this.content = content;
	}

	/**
	 * 先计算长度,再返回。这里长度包含长度本身的字节
	 */
	public Integer getLenth() {
		
		this.lenth = 4 + 8*2 + this.content.getBytes(Charset.forName("utf-8")).length;
		
		return lenth;
	}

	public MyMsg(Long sender, Long receiver, String content) {
		this.sender = sender;
		this.receiver = receiver;
		this.content = content;
	}

	@Override
	public String toString() {
		return "MyMsg [lenth=" + this.getLenth() + ", sender=" + sender + ", receiver="
				+ receiver + ", content=" + content + "]";
	}

}
二、定义编解码器

    1、编码器

import java.nio.charset.Charset;
import java.nio.charset.CharsetEncoder;
import org.apache.mina.core.buffer.IoBuffer;
import org.apache.mina.core.session.IoSession;
import org.apache.mina.filter.codec.ProtocolEncoderAdapter;
import org.apache.mina.filter.codec.ProtocolEncoderOutput;

/**
 *	编码器 
 */
public class MyEncoder extends ProtocolEncoderAdapter {

	@Override
	public void encode(IoSession session, Object message, ProtocolEncoderOutput encoderOutput)
			throws Exception {

		CharsetEncoder ce = Charset.forName("utf-8").newEncoder();
		
		MyMsg msg = (MyMsg) message;
		
		//	Mina IoBuffer
		IoBuffer buffer = IoBuffer.allocate(100).setAutoExpand(true);
		
		buffer.putInt(msg.getLenth());
		buffer.putLong(msg.getSender());
		buffer.putL
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值