一个Mina实例

来源:互联网 发布:vb编程软件中文下载 编辑:程序博客网 时间:2024/05/21 20:21

本实例是参考Mina官网的实例更改的,也添加了自己的一些东西,也解决了有些同学遇到乱码的情况。

不多说了,直接放代码:

客服端:

MimaTimeClient.java

[java] view plaincopy
  1. package minaExamle.client;  
  2.   
  3. import java.net.InetSocketAddress;  
  4. import java.nio.charset.Charset;  
  5. import java.util.Scanner;  
  6.   
  7. import minaExamle.common.BaseConfig;  
  8.   
  9. import org.apache.mina.core.future.ConnectFuture;  
  10. import org.apache.mina.core.service.IoConnector;  
  11. import org.apache.mina.core.session.IoSession;  
  12. import org.apache.mina.filter.codec.ProtocolCodecFilter;  
  13. import org.apache.mina.filter.codec.prefixedstring.PrefixedStringCodecFactory;  
  14. import org.apache.mina.filter.logging.LoggingFilter;  
  15. import org.apache.mina.transport.socket.nio.NioSocketConnector;  
  16.   
  17. public class MimaTimeClient {  
  18.   
  19.     public static void main(String[] args) {  
  20.         IoConnector connector = new NioSocketConnector();  
  21.         connector.getFilterChain().addLast( "logger"new LoggingFilter() );  
  22.         connector.getFilterChain().addLast( "codec"new ProtocolCodecFilter( new PrefixedStringCodecFactory(Charset.forName("UTF-8"))));  
  23.         connector.setHandler(new TimeClientHander());  
  24.         ConnectFuture connectFuture = connector.connect(new InetSocketAddress("127.0.0.1",BaseConfig.PORT));  
  25.         //等待建立连接  
  26.         connectFuture.awaitUninterruptibly();  
  27.         System.out.println("连接成功");  
  28.           
  29.         IoSession session = connectFuture.getSession();  
  30.           
  31.         Scanner sc = new Scanner(System.in);  
  32.           
  33.         boolean quit = false;  
  34.           
  35.         while(!quit){  
  36.               
  37.             String str = sc.next();  
  38.             if(str.equalsIgnoreCase("quit")){  
  39.                 quit = true;  
  40.             }  
  41.             session.write(str);  
  42.         }  
  43.           
  44.         //关闭  
  45.         if(session!=null){  
  46.             if(session.isConnected()){  
  47.                 session.getCloseFuture().awaitUninterruptibly();  
  48.             }  
  49.             connector.dispose(true);  
  50.         }  
  51.           
  52.           
  53.     }  
  54.   
  55. }  
TimeClientHander.java
[java] view plaincopy
  1. package minaExamle.client;  
  2.   
  3. import org.apache.mina.core.service.IoHandler;  
  4. import org.apache.mina.core.session.IdleStatus;  
  5. import org.apache.mina.core.session.IoSession;  
  6.   
  7. public class TimeClientHander implements IoHandler {  
  8.   
  9.     @Override  
  10.     public void exceptionCaught(IoSession arg0, Throwable arg1)  
  11.             throws Exception {  
  12.         // TODO Auto-generated method stub  
  13.         arg1.printStackTrace();  
  14.     }  
  15.   
  16.     @Override  
  17.     public void messageReceived(IoSession arg0, Object message) throws Exception {  
  18.         // TODO Auto-generated method stub  
  19.         System.out.println("client接受信息:"+message.toString());  
  20.     }  
  21.   
  22.     @Override  
  23.     public void messageSent(IoSession arg0, Object message) throws Exception {  
  24.         // TODO Auto-generated method stub  
  25.         System.out.println("client发送信息"+message.toString());  
  26.     }  
  27.   
  28.     @Override  
  29.     public void sessionClosed(IoSession session) throws Exception {  
  30.         // TODO Auto-generated method stub  
  31.         System.out.println("client与:"+session.getRemoteAddress().toString()+"断开连接");  
  32.     }  
  33.   
  34.     @Override  
  35.     public void sessionCreated(IoSession session) throws Exception {  
  36.         // TODO Auto-generated method stub  
  37.         System.out.println("client与:"+session.getRemoteAddress().toString()+"建立连接");  
  38.     }  
  39.   
  40.     @Override  
  41.     public void sessionIdle(IoSession session, IdleStatus status) throws Exception {  
  42.         // TODO Auto-generated method stub  
  43.         System.out.println( "IDLE " + session.getIdleCount( status ));  
  44.     }  
  45.   
  46.     @Override  
  47.     public void sessionOpened(IoSession arg0) throws Exception {  
  48.         // TODO Auto-generated method stub  
  49.         System.out.println("打开连接");  
  50.     }  
  51.   
  52. }  

服务端:

MinaTimeServer.java

[java] view plaincopy
  1. package minaExamle.server;  
  2.   
  3. import java.io.IOException;  
  4. import java.net.InetSocketAddress;  
  5. import java.nio.charset.Charset;  
  6.   
  7. import minaExamle.common.BaseConfig;  
  8.   
  9. import org.apache.mina.core.service.IoAcceptor;  
  10. import org.apache.mina.core.session.IdleStatus;  
  11. import org.apache.mina.filter.codec.ProtocolCodecFilter;  
  12. import org.apache.mina.filter.codec.prefixedstring.PrefixedStringCodecFactory;  
  13. import org.apache.mina.filter.logging.LoggingFilter;  
  14. import org.apache.mina.transport.socket.nio.NioSocketAcceptor;  
  15.   
  16. public class MinaTimeServer {  
  17.       
  18.     private static final int PORT= BaseConfig.PORT;  
  19.       
  20.     public static void main(String[] args) throws IOException {  
  21.   
  22.         IoAcceptor acceptor = new NioSocketAcceptor();  
  23.         acceptor.getFilterChain().addLast( "logger"new LoggingFilter() );  
  24.         acceptor.getFilterChain().addLast( "codec"new ProtocolCodecFilter( new PrefixedStringCodecFactory(Charset.forName("UTF-8"))));  
  25.         acceptor.setHandler(  new TimeServerHandler() );  
  26.           
  27.         acceptor.getSessionConfig().setReadBufferSize( 2048 );  
  28.                 acceptor.getSessionConfig().setIdleTime( IdleStatus.BOTH_IDLE, 10 );  
  29.           
  30.         acceptor.bind(new InetSocketAddress(PORT));  
  31.           
  32.     }  
  33.   
  34. }  

TimeServerHandler.java
[java] view plaincopy
  1. package minaExamle.server;  
  2.   
  3. import java.util.Date;  
  4.   
  5. import org.apache.mina.core.service.IoHandler;  
  6. import org.apache.mina.core.session.IdleStatus;  
  7. import org.apache.mina.core.session.IoSession;  
  8.   
  9. public class TimeServerHandler implements IoHandler {  
  10.   
  11.     @Override  
  12.     public void exceptionCaught(IoSession arg0, Throwable arg1)  
  13.             throws Exception {  
  14.         arg1.printStackTrace();  
  15.   
  16.     }  
  17.   
  18.     @Override  
  19.     public void messageReceived(IoSession session, Object message) throws Exception {  
  20.           
  21.         String str = message.toString();  
  22.           
  23.         System.out.println("接受到的消息:"+str);  
  24.           
  25.         if( str.trim().equalsIgnoreCase("quit") ) {  
  26.             session.close(true);  
  27.             return;  
  28.         }  
  29.         Date date = new Date();  
  30.         session.write( date.toString() );  
  31.         System.out.println("Message written...");  
  32.     }  
  33.   
  34.     @Override  
  35.     public void messageSent(IoSession arg0, Object arg1) throws Exception {  
  36.         // TODO Auto-generated method stub  
  37.         System.out.println("发送信息:"+arg1.toString());  
  38.     }  
  39.   
  40.     @Override  
  41.     public void sessionClosed(IoSession session) throws Exception {  
  42.         // TODO Auto-generated method stub  
  43.         System.out.println("IP:"+session.getRemoteAddress().toString()+"断开连接");  
  44.     }  
  45.   
  46.     @Override  
  47.     public void sessionCreated(IoSession session) throws Exception {  
  48.         // TODO Auto-generated method stub  
  49.         System.out.println("IP:"+session.getRemoteAddress().toString());  
  50.     }  
  51.   
  52.     @Override  
  53.     public void sessionIdle(IoSession session, IdleStatus status) throws Exception {  
  54.         // TODO Auto-generated method stub  
  55.         System.out.println( "IDLE " + session.getIdleCount( status ));  
  56.   
  57.     }  
  58.   
  59.     @Override  
  60.     public void sessionOpened(IoSession arg0) throws Exception {  
  61.         // TODO Auto-generated method stub  
  62.   
  63.     }  
  64.   
  65. }  

BaseConfig.java
[java] view plaincopy
  1. package minaExamle.common;  
  2.   
  3. public class BaseConfig {  
  4.     //服务器端口  
  5.     public static final int PORT = 9123;  
  6.       
  7. }  

服务端运行截图

客服端运行截图


0 0