客户端:
package com.lemon.MINA;
import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder;
import org.apache.mina.core.future.ConnectFuture;
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.util.Scanner;
/**
* Mina客户端:
*
* @author lemonsun
*/
public class Client {
public static void main(String[] args) {
//创建连接 nio
NioSocketConnector connector = new NioSocketConnector(9999);
DefaultIoFilterChainBuilder chain = connector.getFilterChain();
//字符串添加过滤器,也可以发送对象 对象过滤器
chain.addLast("myChin",new ProtocolCodecFilter(new TextLineCodecFactory()));
//设置Handler
connector.setHandler(new MinaClientHandler());//设置自定义的Handler
connector.setConnectTimeoutMillis(1000*10); //连接失效时间10秒
//连接服务器
ConnectFuture cf = connector.connect(new InetSocketAddress("localhost", 9999));
cf.awaitUninterruptibly();//等待连接成功
//成功后,即可发送消息
Scanner input = new Scanner(System.in);
//死循环 反复输入
while(true){
System.out.println("请输入:");
String info = input.nextLine(); //会阻塞
//发送消息
cf.getSession().write(info);
}
//等待服务器连接关闭,结束长连接
// cf.getSession().getCloseFuture().awaitUninterruptibly();
//connector.dispose(); //关闭连接
}
}
客户端消息处理:
package com.lemon.MINA;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IoSession;
/**
* 消息处理器:
*
* @author lemonsun
*/
public class MinaClientHandler extends IoHandlerAdapter {
@Override
public void sessionOpened(IoSession session) throws Exception {
super.sessionOpened(session);
System.out.println("sessionOpened!");
}
@Override
public void sessionClosed(IoSession session) throws Exception {
super.sessionClosed(session);
System.out.println("sessionClosed!");
}
@Override
public void messageReceived(IoSession session, Object message) throws Exception {
super.messageReceived(session, message);
String msg = (String)message;
System.out.println(msg);
}
}