package com.chiyan.apach.mina.client;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;
/**
* Created by IntelliJ IDEA.
* User: chiyan
* Date: 12-7-19
* Time: 上午12:31
*/
public class SimpleMinaClientHandler extends IoHandlerAdapter {
/**
* 当客户端接受到消息时
*/
@Override
public void messageReceived(IoSession session, Object message) throws Exception {
Integer num = Integer.valueOf((String)message);
if(num == null || num >10){
session.close(true);
return;
}
System.out.println("receive server num : [ " + num + " ]");
Thread.sleep(1000);
session.write("client received num is : " + num + ", request next num");
}
/**
* 当一个客户端被关闭时
*/
@Override
public void sessionClosed(IoSession session) throws Exception {
System.out.println("client disconnect");
}
/**
* 当一个客户端连接进入时
*/
@Override
public void sessionOpened(IoSession session) throws Exception {
System.out.println("create connection to server :" + session.getRemoteAddress());
session.write("client started");
session.write("Hello World!");
}
}
b)搭建客户端MainClient
package com.chiyan.apach.mina.client;
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;
/**
* Created by IntelliJ IDEA.
* User: chiyan
* Date: 12-7-19
* Time: 上午12:40
*/
public class MainClient {
/**
* 服务器ip
*/
private static final String SERVER_IP="127.0.0.1";
/**
* 服务器端口
*/
private static final int SERVER_PORT=8899;
public static void main(String []args){
//Create TCP/IP connection
NioSocketConnector connector = new NioSocketConnector();
//创建接受数据的过滤器
DefaultIoFilterChainBuilder chain = connector.getFilterChain();
//设定这个过滤器将一行一行(/r/n)的读取数据
chain.addLast("myChain", new ProtocolCodecFilter(new TextLineCodecFactory()));
//服务器的消息处理器:一个 SimpleMinaClientHandler 对象
connector.setHandler(new SimpleMinaClientHandler());
//set connect timeout
connector.setConnectTimeoutMillis(30 * 1000);
//连接到服务器:
ConnectFuture cf = connector.connect(new InetSocketAddress(SERVER_IP,SERVER_PORT));
cf.awaitUninterruptibly();
cf.getSession().getCloseFuture().awaitUninterruptibly();
connector.dispose();
}
} 运行程序:
1.服务端打印:
Mina server is listing port:8899
client connection : /127.0.0.1:50497
receive client message : [ client started ]
receive client message : [ Hello World! ]
receive client message : [ client received num is : 1, request next num ]
receive client message : [ client received num is : 2, request next num ]
receive client message : [ client received num is : 3, request next num ]
receive client message : [ client received num is : 4, request next num ]
receive client message : [ client received num is : 5, request next num ]
receive client message : [ client received num is : 6, request next num ]
receive client message : [ client received num is : 7, request next num ]
receive client message : [ client received num is : 8, request next num ]
receive client message : [ client received num is : 9, request next num ]
receive client message : [ client received num is : 10, request next num ]
client disconnection : /127.0.0.1:50497 is Disconnection 2.客户端打印:
create connection to server :/127.0.0.1:8899
receive server num : [ 1 ]
receive server num : [ 2 ]
receive server num : [ 3 ]
receive server num : [ 4 ]
receive server num : [ 5 ]
receive server num : [ 6 ]
receive server num : [ 7 ]
receive server num : [ 8 ]
receive server num : [ 9 ]
receive server num : [ 10 ]
client disconnect
小结:
通过一个Hello World完成了基于mina编写的客户端和服务端通信的例子,接下通过解析源代码的方式来了解mina客户端和服务端通讯的过程。Apache MINA (3) NioSocketAcceptor初始化
代码在附件中