mina之HelloWorld(TCP/IP)

来源:互联网 发布:淘宝店铺引流 编辑:程序博客网 时间:2024/05/21 14:02

这里来写一个简单的基于 TCP/IP 协议的c-s 实例

1、引入相关jar包,只需引入mina-core.jar 和 log4j 及相关实现包即可

这里是mina所需jar包及其下载地址

  • MINA 2.x Core
  • JDK 1.5 or greater
  • SLF4J 1.3.0 or greater
    • 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

     mina下载地址:http://mina.apache.org/downloads-mina.html

    log4j                   http://www.slf4j.org/download.html

    这里确保log4j和slf4j版本一致

    如果您用maven作为项目管理插件的话可以这样

    [html] view plaincopy
    1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    2.     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  
    3.     <modelVersion>4.0.0</modelVersion>  
    4.     <groupId>mina</groupId>  
    5.     <artifactId>mina</artifactId>  
    6.     <version>0.0.1-SNAPSHOT</version>  
    7.     <dependencies>  
    8.         <dependency>  
    9.             <groupId>org.apache.mina</groupId>  
    10.             <artifactId>mina-core</artifactId>  
    11.             <version>2.0.7</version>  
    12.         </dependency>  
    13.   
    14.         <dependency>  
    15.             <groupId>org.slf4j</groupId>  
    16.             <artifactId>slf4j-api</artifactId>  
    17.             <version>1.5.8</version>  
    18.         </dependency>  
    19.         <dependency>  
    20.             <groupId>log4j</groupId>  
    21.             <artifactId>log4j</artifactId>  
    22.             <version>1.2.14</version>  
    23.         </dependency>  
    24.         <dependency>  
    25.             <groupId>org.slf4j</groupId>  
    26.             <artifactId>slf4j-log4j12</artifactId>  
    27.             <version>1.5.8</version>  
    28.         </dependency>  
    29.         <dependency>  
    30.             <groupId>org.slf4j</groupId>  
    31.             <artifactId>jcl-over-slf4j</artifactId>  
    32.             <version>1.5.8</version>  
    33.         </dependency>  
    34.     </dependencies>  
    35. </project>  

     编写server

    [java] view plaincopy
    1. import java.net.InetSocketAddress;  
    2. import java.nio.charset.Charset;  
    3.   
    4. import org.apache.mina.core.service.IoAcceptor;  
    5. import org.apache.mina.core.session.IdleStatus;  
    6. import org.apache.mina.filter.codec.ProtocolCodecFilter;  
    7. import org.apache.mina.filter.codec.textline.LineDelimiter;  
    8. import org.apache.mina.filter.codec.textline.TextLineCodecFactory;  
    9. import org.apache.mina.filter.logging.LoggingFilter;  
    10. import org.apache.mina.transport.socket.nio.NioSocketAcceptor;  
    11.   
    12. public class MinaServer {  
    13.     private static final int PORT = 9725;  
    14.     public static void main(String[] args) throws Exception{  
    15.         // 创建一个非阻塞的server端的Socket,因为这里是服务端所以用IoAcceptor  
    16.         IoAcceptor acceptor = new NioSocketAcceptor();  
    17.         // 添加一个日志过滤器  
    18.         acceptor.getFilterChain().addLast("logger"new LoggingFilter());  
    19.         // 添加一个编码过滤器  
    20.         acceptor.getFilterChain().addLast("codec",  
    21.                 new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8"),  
    22.                         LineDelimiter.WINDOWS.getValue(),  
    23.                         LineDelimiter.WINDOWS.getValue())));  
    24.   
    25.         // 绑定业务处理器,这段代码要在acceptor.bind()方法之前执行,因为绑定套接字之后就不能再做这些准备  
    26.         acceptor.setHandler(new MinaServerHanlder());  
    27.         // 设置读取数据的缓冲区大小  
    28.         acceptor.getSessionConfig().setReadBufferSize(2048);  
    29.         acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10);  
    30.         // 绑定一个监听端口  
    31.         acceptor.bind(new InetSocketAddress(PORT));  
    32.     }  
    33. }  

    server 业务处理类

    [java] view plaincopy
    1. import java.util.Date;  
    2.   
    3. import org.apache.log4j.Logger;  
    4. import org.apache.mina.core.service.IoHandlerAdapter;  
    5. import org.apache.mina.core.session.IdleStatus;  
    6. import org.apache.mina.core.session.IoSession;  
    7.   
    8. public class MinaServerHanlder extends IoHandlerAdapter {  
    9.     public static Logger logger = Logger.getLogger(MinaServerHanlder.class);  
    10.     @Override  
    11.     public void exceptionCaught(IoSession session, Throwable cause)throws Exception {  
    12.         cause.printStackTrace();  
    13.     }  
    14.   
    15.     @Override  
    16.     public void messageReceived(IoSession session, Object message)throws Exception {  
    17.          String str = message.toString();  
    18.             if( str.trim().equalsIgnoreCase("quit") ) {  
    19.                 session.close(Boolean.TRUE);  
    20.                 return;  
    21.             }  
    22.             Date date = new Date();  
    23.             session.write( date.toString() );  
    24.         logger.info("server -消息已经接收到!"+message);  
    25.     }  
    26.   
    27.     @Override  
    28.     public void messageSent(IoSession session, Object message) throws Exception {  
    29.         logger.info("server -消息已经发出");  
    30.     }  
    31.   
    32.     @Override  
    33.     public void sessionClosed(IoSession session) throws Exception {  
    34.         logger.info("server-session关闭连接断开");  
    35.     }  
    36.   
    37.     @Override  
    38.     public void sessionCreated(IoSession session) throws Exception {  
    39.         logger.info("server-session创建,建立连接");  
    40.     }  
    41.   
    42.     @Override  
    43.     public void sessionIdle(IoSession session, IdleStatus status)throws Exception {  
    44.         logger.info("server-服务端进入空闲状态..");  
    45.     }  
    46.   
    47.     @Override  
    48.     public void sessionOpened(IoSession session) throws Exception {  
    49.         logger.info("server-服务端与客户端连接打开...");  
    50.     }  
    51. }  

    client

    [java] view plaincopy
    1. import java.net.InetSocketAddress;  
    2. import java.nio.charset.Charset;  
    3.   
    4. import org.apache.log4j.Logger;  
    5. import org.apache.mina.core.future.ConnectFuture;  
    6. import org.apache.mina.core.service.IoConnector;  
    7. import org.apache.mina.core.session.IoSession;  
    8. import org.apache.mina.filter.codec.ProtocolCodecFilter;  
    9. import org.apache.mina.filter.codec.textline.LineDelimiter;  
    10. import org.apache.mina.filter.codec.textline.TextLineCodecFactory;  
    11. import org.apache.mina.transport.socket.nio.NioSocketConnector;  
    12.   
    13.   
    14. public class MinaClient {  
    15.     private static Logger log = Logger.getLogger(MinaClient.class);  
    16.     private static String HOST="localhost";  
    17.     private static int PORT=9725;  
    18.     public static void main(String[] args) {  
    19.         IoConnector conn = new NioSocketConnector();  
    20.         // 设置链接超时时间  
    21.         conn.setConnectTimeoutMillis(30000L);  
    22.         // 添加过滤器  
    23.         conn.getFilterChain().addLast("codec",  
    24.                         new ProtocolCodecFilter(new TextLineCodecFactory(Charset  
    25.                         .forName("UTF-8"), LineDelimiter.WINDOWS.getValue(),  
    26.                         LineDelimiter.WINDOWS.getValue())));  
    27.         // 添加业务处理handler  
    28.         conn.setHandler(new MinaClientHandler());   
    29.         IoSession session =null;  
    30.         try {  
    31.             ConnectFuture future = conn.connect(new InetSocketAddress(HOST, PORT));// 创建连接  
    32.             future.awaitUninterruptibly();// 等待连接创建完成  
    33.             session = future.getSession();// 获得session  
    34.             session.write("Hello World!");// 发送消息  
    35.         } catch (Exception e) {  
    36.             log.error("客户端链接异常...", e);  
    37.         }  
    38.   
    39.         session.getCloseFuture().awaitUninterruptibly();// 等待连接断开  
    40.         conn.dispose();  
    41.   
    42.     }  
    43. }  

    client业务处理类

    [java] view plaincopy
    1. import org.apache.log4j.Logger;  
    2. import org.apache.mina.core.service.IoHandlerAdapter;  
    3. import org.apache.mina.core.session.IdleStatus;  
    4. import org.apache.mina.core.session.IoSession;  
    5.   
    6. public class MinaClientHandler extends  IoHandlerAdapter {  
    7.     private static final Logger log = Logger.getLogger(MinaClientHandler.class);  
    8.     @Override  
    9.     public void exceptionCaught(IoSession session, Throwable cause) throws Exception {  
    10.         cause.printStackTrace();  
    11.     }  
    12.   
    13.     @Override  
    14.     public void messageReceived(IoSession session, Object message)throws Exception {  
    15.         log.info("client消息接收到"+message);  
    16.     }  
    17.   
    18.     @Override  
    19.     public void messageSent(IoSession session, Object message) throws Exception {  
    20.         log.info("client-消息已经发送"+message);  
    21.     }  
    22.   
    23.     @Override  
    24.     public void sessionClosed(IoSession session) throws Exception {  
    25.         log.info("client -session关闭连接断开");  
    26.     }  
    27.   
    28.     @Override  
    29.     public void sessionCreated(IoSession session) throws Exception {  
    30.         System.out.println("client -创建session");  
    31.     }  
    32.   
    33.     @Override  
    34.     public void sessionIdle(IoSession session, IdleStatus status) throws Exception {  
    35.         System.out.println("client-系统空闲中...");  
    36.     }  
    37.   
    38.     @Override  
    39.     public void sessionOpened(IoSession session) throws Exception {  
    40.         System.out.println("client-session打开");  
    41.     }  
    42. }  
  • 0 0