Mina2.0入门——例子

本文介绍如何使用Apache MINA框架搭建简单的服务端与客户端交互程序,包括必要的jar包配置、服务端与客户端的代码实现,以及运行效果展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

准备jar包:mina-core-2.0.2.jar、log4j-1.2.15.jar、slf4j-api-1.6.1.jar、slf4j-log4j12-1.6.1.jar。

一、服务端

package mina;

import java.net.InetSocketAddress;
import org.apache.mina.core.filterchain.IoFilter;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;

public class TestMinaServer {
	private NioSocketAcceptor acceptor;
	private IoFilter filter = new ProtocolCodecFilter(new TextLineCodecFactory());  
	private InetSocketAddress address = new InetSocketAddress("localhost",12340);
	
	public void config() {
	    //创建NioSocketAcceptor对象
		acceptor = new NioSocketAcceptor();
		// 业务处理类
		acceptor.setHandler(new TestMinaHandler());
		// 编码过滤器
		acceptor.getFilterChain().addLast("codec", filter);   

		acceptor.setDefaultLocalAddress(address);
		try{
			acceptor.bind();
			System.out.println("bind:"+12340);
		} catch(Exception e){
			e.printStackTrace();
		}
		
	}
	public static void main(String[] args){
		TestMinaServer server = new TestMinaServer();
		server.config();
	}
}

业务逻辑写在ServerHandler中

package mina;

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

public class TestMinaHandler extends IoHandlerAdapter{
	public void messageReceived(IoSession arg0, Object arg1) throws Exception {
		System.out.println(arg1.toString());
		arg0.write("Hello,Client!I'm Server.");
		arg0.close(true);
	}
}

二、客户端

package mina;

import java.net.InetSocketAddress;
import org.apache.mina.core.filterchain.IoFilter;
import org.apache.mina.core.future.ConnectFuture;
import org.apache.mina.core.future.ReadFuture;
import org.apache.mina.core.service.IoConnector;
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;

public class TestMinaClient {
	private IoConnector connector;
	private String host = "localhost";
	private int port = 12340;
	private InetSocketAddress address = new InetSocketAddress(host, port);
	private IoSession session;
	private IoFilter filter = new ProtocolCodecFilter(new TextLineCodecFactory());  
	
	public void connectServer() {
		connector = new NioSocketConnector(1);
		
		// 同步调用,即请求后需等待服务端返回消息
		connector.getSessionConfig().setUseReadOperation(true);
		
		// 编码过滤器   
		connector.getFilterChain().addLast("codec", filter);
		
		ConnectFuture future = connector.connect(address);
		//等待连接完成
		future.awaitUninterruptibly();
		
		session = future.getSession();		
	}
	
	public void writeAndRead(){
		//写数据
		session.write("Hello,Server!I'm Client.");
		//读数据
		ReadFuture rf = session.read().awaitUninterruptibly();
		System.out.println(rf.getMessage().toString());
		session.close(true);
	}
	
	public static void main(String[] args){
		TestMinaClient client = new TestMinaClient();
		//建立连接
		client.connectServer();
		//读写操作
		client.writeAndRead();
	}
}
先执行服务端,后运行客户端。

服务端输出结果:

Hello,Server!I'm Client.

客户端输出结果:

Hello,Client!I'm Server.

根据官方的例子做了点调整,具体可以参考:http://mina.apache.org/mina-project/quick-start-guide.html


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值