0
点赞
收藏
分享

微信扫一扫

Mina学习笔记(2) HelloWorld(TCP/IP)

迪莉娅1979 2022-12-16 阅读 138


这里来写一个简单的基于 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 plain​​ ​​ copy​​

  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 plain​​ ​​ copy​​

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

server 业务处理类

[java] ​​ view plain​​ ​​ copy​​

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

client

[java] ​​ view plain​​ ​​ copy​​

  1. import
  2. import
  3.   
  4. import
  5. import
  6. import
  7. import
  8. import
  9. import
  10. import
  11. import
  12.   
  13.   
  14. public class
  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
  19. new
  20. // 设置链接超时时间
  21.         conn.setConnectTimeoutMillis(30000L);  
  22. // 添加过滤器
  23. "codec",  
  24. new ProtocolCodecFilter(new
  25. "UTF-8"), LineDelimiter.WINDOWS.getValue(),  
  26.                         LineDelimiter.WINDOWS.getValue())));  
  27. // 添加业务处理handler
  28. new
  29. null;  
  30. try
  31. new InetSocketAddress(HOST, PORT));// 创建连接
  32. // 等待连接创建完成
  33. // 获得session
  34. "Hello World!");// 发送消息
  35. catch
  36. "客户端链接异常...", e);  
  37.         }  
  38.   
  39. // 等待连接断开
  40.         conn.dispose();  
  41.   
  42.     }  
  43. }  

client业务处理类

[java] ​​ view plain​​ ​​ copy​​

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

 先运行server在运行client’ 结果



  • 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 plain​​ ​​ copy​​

  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 plain​​ ​​ copy​​

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

server 业务处理类

[java] ​​ view plain​​ ​​ copy​​

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

client

[java] ​​ view plain​​ ​​ copy​​

  1. import
  2. import
  3.   
  4. import
  5. import
  6. import
  7. import
  8. import
  9. import
  10. import
  11. import
  12.   
  13.   
  14. public class
  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
  19. new
  20. // 设置链接超时时间
  21.         conn.setConnectTimeoutMillis(30000L);  
  22. // 添加过滤器
  23. "codec",  
  24. new ProtocolCodecFilter(new
  25. "UTF-8"), LineDelimiter.WINDOWS.getValue(),  
  26.                         LineDelimiter.WINDOWS.getValue())));  
  27. // 添加业务处理handler
  28. new
  29. null;  
  30. try
  31. new InetSocketAddress(HOST, PORT));// 创建连接
  32. // 等待连接创建完成
  33. // 获得session
  34. "Hello World!");// 发送消息
  35. catch
  36. "客户端链接异常...", e);  
  37.         }  
  38.   
  39. // 等待连接断开
  40.         conn.dispose();  
  41.   
  42.     }  
  43. }  

client业务处理类

[java] ​​ view plain​​ ​​ copy​​

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

 先运行server在运行client’ 结果


举报

相关推荐

0 条评论