准备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