mina官方例子

本文介绍了一个使用Apache Mina实现的简单逆向服务器示例。该服务器接收客户端发送的文本行,并将这些文本行反转后返回。通过配置NioSocketAcceptor,添加日志过滤器和协议编解码过滤器,以及设置逆向协议处理器,实现了基本的文本行逆向功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

 

 

 

注: mina 使用slf4j作为日志的记录

 

 

 

package org.apache.mina.example.reverser;
21  
22  import java.net.InetSocketAddress;
23  import java.nio.charset.Charset;
24  
25  import org.apache.mina.filter.codec.ProtocolCodecFilter;
26  import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
27  import org.apache.mina.filter.logging.LoggingFilter;
28  import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
29  
30  /**
31   * (<b>Entry point</b>) Reverser server which reverses all text lines from
32   * clients.
33   *
34   * @author <a href="http://mina.apache.org">Apache MINA Project</a>
35   */
36  public class Main {
37      private static final int PORT = 8080;
38  
39      public static void main(String[] args) throws Exception {
40          NioSocketAcceptor acceptor = new NioSocketAcceptor();
41  
42          // Prepare the configuration
43          acceptor.getFilterChain().addLast("logger", new LoggingFilter());
44          acceptor.getFilterChain().addLast(
45                  "codec",
46                  new ProtocolCodecFilter(new TextLineCodecFactory(Charset
47                          .forName("UTF-8"))));
48  
49          // Bind
50          acceptor.setHandler(new ReverseProtocolHandler());
51          acceptor.bind(new InetSocketAddress(PORT));
52  
53          System.out.println("Listening on port " + PORT);
54      }
55  }

 

 

 

 

@Override 覆盖那几个方法,其实不一定用extends 用implement 能列出所有的方法

 

 

 

package org.apache.mina.example.reverser;
21  
22  import org.apache.mina.core.service.IoHandler;
23  import org.apache.mina.core.service.IoHandlerAdapter;
24  import org.apache.mina.core.session.IoSession;
25  
26  /**
27   * {@link IoHandler} implementation of reverser server protocol.
28   *
29   * @author <a href="http://mina.apache.org">Apache MINA Project</a>
30   */
31  public class ReverseProtocolHandler extends IoHandlerAdapter {
32      @Override
33      public void exceptionCaught(IoSession session, Throwable cause) {
34          // Close connection when unexpected exception is caught.
35          session.close(true);
36      }
37  
38      @Override
39      public void messageReceived(IoSession session, Object message) {
40          // Reverse reveiced string
41          String str = message.toString();
42          StringBuilder buf = new StringBuilder(str.length());
43          for (int i = str.length() - 1; i >= 0; i--) {
44              buf.append(str.charAt(i));
45          }
46  
47          // and write it back.
48          session.write(buf.toString());   // 写回,这样可以显示
49      }
50  }

 

 

 

 

 

 

 

 

 

 

 

 

下面是另一个例子 public class Main {

37      private static final int PORT = 8080;
38  
39      public static void main(String[] args) throws Exception {
40          NioSocketAcceptor acceptor = new NioSocketAcceptor();
41  
42          // Prepare the configuration
43          acceptor.getFilterChain().addLast("logger", new LoggingFilter());
44          acceptor.getFilterChain().addLast(
45                  "codec",
46                  new ProtocolCodecFilter(new TextLineCodecFactory(Charset
47                          .forName("UTF-8"))));
48  
49          // Bind
50          acceptor.setHandler(new ReverseProtocolHandler());
51          acceptor.bind(new InetSocketAddress(PORT));
52  
53          System.out.println("Listening on port " + PORT);
54      }
55  }
 

 

 

 public class ReverseProtocolHandler extends IoHandlerAdapter {
32      @Override
33      public void exceptionCaught(IoSession session, Throwable cause) {
34          // Close connection when unexpected exception is caught.
35          session.close(true);
36      }
37  
38      @Override
39      public void messageReceived(IoSession session, Object message) {
40          // Reverse reveiced string
41          String str = message.toString();
42          StringBuilder buf = new StringBuilder(str.length());
43          for (int i = str.length() - 1; i >= 0; i--) {
44              buf.append(str.charAt(i));
45          }
46  
47          // and write it back.
48          session.write(buf.toString());
49      }
50  }
 

 

 

 

 

 

第三个例子   server 端基本都一样

 

 

public class Main {
37      private static final int PORT = 8080;
38  
39      public static void main(String[] args) throws Exception {
40          NioSocketAcceptor acceptor = new NioSocketAcceptor();
41  
42          // Prepare the configuration
43          acceptor.getFilterChain().addLast("logger", new LoggingFilter());
44          acceptor.getFilterChain().addLast(
45                  "codec",
46                  new ProtocolCodecFilter(new TextLineCodecFactory(Charset
47                          .forName("UTF-8"))));
48  
49          // Bind
50          acceptor.setHandler(new ReverseProtocolHandler());
51          acceptor.bind(new InetSocketAddress(PORT));
52  
53          System.out.println("Listening on port " + PORT);
54      }
55  }
 

 

 

 

 public class ReverseProtocolHandler extends IoHandlerAdapter {
32      @Override
33      public void exceptionCaught(IoSession session, Throwable cause) {
34          // Close connection when unexpected exception is caught.
35          session.close(true);
36      }
37  
38      @Override
39      public void messageReceived(IoSession session, Object message) {
40          // Reverse reveiced string
41          String str = message.toString();
42          StringBuilder buf = new StringBuilder(str.length());
43          for (int i = str.length() - 1; i >= 0; i--) {
44              buf.append(str.charAt(i));
45          }
46  
47          // and write it back.
48          session.write(buf.toString());
49      }
50  }
 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值