所需文件
- Eclipse http://www.eclipse.org/downloads/
- JDK 1.5 or greater http://www.oracle.com/technetwork/java/javase/downloads/index.html
- Mina 2.0.7 Core http://mina.apache.org/mina-project/downloads.html
- Mina source(可选,方便查看源码) http://mina.apache.org/mina-project/downloads.html
- [SLF4J|http://www.slf4j.org/] 1.3.0 or greater http://www.slf4j.org/download.html
- Log4J 1.2 users: slf4j-api.jar, slf4j-log4j12.jar, and Log4J 1.2.x
- Log4J 1.3 users: slf4j-api.jar, slf4j-log4j13.jar, and Log4J 1.3.x
- java.util.logging users: slf4j-api.jar and slf4j-jdk14.jar
- IMPORTANT : Please make sure you are using the right slf4j-*.jar that matches to your logging framework. For instance, slf4j-log4j12.jar and log4j-1.3.x.jar can not be used together, and will malfunction.
可参考http://mina.apache.org/mina-project/quick-start-guide.htm
下载完成安装或解压之后,打开eclipse创建java项目
添加类
MinaServer
1 import java.io.IOException; 2 import java.net.InetSocketAddress; 3 4 import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder; 5 import org.apache.mina.filter.codec.ProtocolCodecFilter; 6 import org.apache.mina.filter.codec.serialization.ObjectSerializationCodecFactory; 7 import org.apache.mina.transport.socket.SocketAcceptor; 8 import org.apache.mina.transport.socket.nio.NioSocketAcceptor; 9 10 11 public class MinaServer 12 { 13 public static void main(String[] args) 14 { 15 //创建ServerScoket 16 SocketAcceptor acceptor = new NioSocketAcceptor(); 17 //设置传输方式(这里设置成对象传输模式,还有很多的类型后面会具体讲到 18 DefaultIoFilterChainBuilder chain = acceptor.getFilterChain(); 19 ProtocolCodecFilter filter = new ProtocolCodecFilter( 20 new ObjectSerializationCodecFactory()); 21 chain.addLast("objectFilter", filter); 22 // 添加消息处理 23 24 acceptor.setHandler(new MinaServerHanlder()); 25 // 开启服务器 26 int bindPort = 9999; 27 try { 28 acceptor.bind(new InetSocketAddress(bindPort)); 29 } catch (IOException e) { 30 e.printStackTrace(); 31 } 32 } 33 34 }
MinaServerHandler
1 import org.apache.mina.core.service.IoHandler; 2 import org.apache.mina.core.session.IdleStatus; 3 import org.apache.mina.core.session.IoSession; 4 5 6 public class MinaServerHanlder implements IoHandler { 7 8 @Override 9 public void exceptionCaught(IoSession arg0, Throwable arg1) 10 throws Exception { 11 // TODO Auto-generated method stub 12 13 } 14 15 @Override 16 public void messageReceived(IoSession arg0, Object arg1) throws Exception { 17 // TODO Auto-generated method stub 18 System.out.println("服务端接受到了消息" + arg1) ; 19 } 20 21 @Override 22 public void messageSent(IoSession arg0, Object arg1) throws Exception { 23 // TODO Auto-generated method stub 24 System.out.println("服务端发送消息" + arg1) ; 25 } 26 27 @Override 28 public void sessionClosed(IoSession arg0) throws Exception { 29 // TODO Auto-generated method stub 30 31 } 32 33 @Override 34 public void sessionCreated(IoSession arg0) throws Exception { 35 // TODO Auto-generated method stub 36 System.out.println("服务端创建Session") ; 37 } 38 39 @Override 40 public void sessionIdle(IoSession arg0, IdleStatus arg1) throws Exception { 41 // TODO Auto-generated method stub 42 System.out.println("服务端空闲Session") ; 43 } 44 45 @Override 46 public void sessionOpened(IoSession arg0) throws Exception { 47 // TODO Auto-generated method stub 48 System.out.println("服务端登录Session") ; 49 } 50 51 }
MinaClient
1 import java.net.InetSocketAddress; 2 3 import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder; 4 import org.apache.mina.core.future.ConnectFuture; 5 import org.apache.mina.filter.codec.ProtocolCodecFilter; 6 import org.apache.mina.filter.codec.serialization.ObjectSerializationCodecFactory; 7 import org.apache.mina.transport.socket.nio.NioSocketConnector; 8 9 10 public class MinaClient { 11 12 public static void main(String[] args) { 13 // TODO Auto-generated method stub 14 // 创建Socket 15 NioSocketConnector connector = new NioSocketConnector(); 16 //设置传输方式 17 DefaultIoFilterChainBuilder chain = connector.getFilterChain(); 18 ProtocolCodecFilter filter = new ProtocolCodecFilter(new ObjectSerializationCodecFactory()); 19 chain.addLast("objectFilter", filter); 20 //设置消息处理 21 connector.setHandler(new MinaClientHanlder()); 22 //超时设置 23 connector.setConnectTimeoutCheckInterval(30); 24 //连接 25 ConnectFuture cf = connector.connect(new InetSocketAddress("localhost", 9999)); 26 cf.awaitUninterruptibly(); 27 cf.getSession().getCloseFuture().awaitUninterruptibly(); 28 connector.dispose(); 29 30 } 31 32 }
MinaClientHandler
1 import org.apache.mina.core.service.IoHandler; 2 import org.apache.mina.core.session.IdleStatus; 3 import org.apache.mina.core.session.IoSession; 4 5 6 public class MinaClientHanlder implements IoHandler { 7 8 @Override 9 public void exceptionCaught(IoSession arg0, Throwable arg1) 10 throws Exception { 11 // TODO Auto-generated method stub 12 13 } 14 15 @Override 16 public void messageReceived(IoSession arg0, Object arg1) throws Exception { 17 // TODO Auto-generated method stub 18 System.out.println("客户端接受到了消息") ; 19 } 20 21 @Override 22 public void messageSent(IoSession arg0, Object arg1) throws Exception { 23 // TODO Auto-generated method stub 24 25 } 26 27 @Override 28 public void sessionClosed(IoSession arg0) throws Exception { 29 // TODO Auto-generated method stub 30 System.out.println("客户端关闭Session") ; 31 } 32 33 @Override 34 public void sessionCreated(IoSession arg0) throws Exception { 35 // TODO Auto-generated method stub 36 System.out.println("客户端创建Session") ; 37 } 38 39 @Override 40 public void sessionIdle(IoSession arg0, IdleStatus arg1) throws Exception { 41 // TODO Auto-generated method stub 42 System.out.println("客户端空闲Session") ; 43 } 44 45 @Override 46 public void sessionOpened(IoSession arg0) throws Exception { 47 // TODO Auto-generated method stub 48 System.out.println("客户端登陆Session"); 49 arg0.write("hello world1"); 50 } 51 52 }
首先运行MinaServer之后再运行MinaClient,在Console里面可以查看消息。