Mina 环境搭建

来源:互联网 发布:类似wiboxls的软件 编辑:程序博客网 时间:2024/06/05 16:42
 

Mina 环境搭建

分类: java 服务器(Mina)

最近在学习服务器,而对JAVA又比较熟悉的我就开始了学习服务器了。可能很多人会说还是用c++吧,不错现在很多大型游戏公司都是用C++的。这里我不得不说我的C++ 真的很一般了。所以这里先学java吧,其实语言也在学习的时候没必要太纠结了!废话太多了,开始入正题了。

本节目录

1 :有用网站

2 :准备资源

3 :环境搭建

4 :Demo测试

首先说一下为什么我这里要选择Mina ,1:Mina是开源的(我一般都会选择开源的框架的)

                                                                      2:Apache 用了很多他的框架,一般来说还是很稳定的。 所以我选择了Mina 。横向比较现在用的比较多的还有netty ,XSocket 等等。

 

Mina 的作用: 它是封装了JavaNIO(如果对JavaNIO不了解的可以再网上找一些资料来看一下,如果这个都没弄明白的话后面就很难继续了,所以建议先打好基础)

 的一个开源框架,更利于我们开发java 服务器。

1 :有用网站

       . 官方网站http://mina.apache.org/

2 :准备资源

       . 搭建Mina 环境必备的资源有 : mina-core-2.0.7.jar , slf4j-api.jar , log4j.jar , slf4j-simple.jar (分别去官网下载吧,版本号这里可能不同以最新的为准,如果实在不知道下载的可以私聊我给你)

3 :环境搭建

        . java 环境

            学习java 的都应该清楚的,JDK 下载  ;  环境变量配置 ;  Eclipse 下载

        . Mina 环境

            以外部包的方式导入上面准备的4个资源(右键项目:build path  / configuare build path / add external jars  )     导入后如下结构图,表明我们的环境搭建好了。

           - Referenced Libraries

               -mina-core-2.0.7.jar 

              - slf4j-api.jar 

              - log4j.jar 

              - slf4j-simple.jar

     

4 :Demo测试

        Server 端

          .  创建Server

            

[java] view plaincopyprint?
  1. public class MinaServer   
  2. {  
  3.     public static void main(String[] args)  
  4.     {  
  5.         //创建ServerScoket  
  6.         SocketAcceptor acceptor = new NioSocketAcceptor();  
  7.         //设置传输方式(这里设置成对象传输模式,还有很多的类型后面会具体讲到  
  8.         DefaultIoFilterChainBuilder chain = acceptor.getFilterChain();  
  9.         ProtocolCodecFilter filter = new ProtocolCodecFilter(  
  10.                 new ObjectSerializationCodecFactory());  
  11.         chain.addLast("objectFilter", filter);  
  12.         // 添加消息处理  
  13.   
  14.         acceptor.setHandler(new MinaServerHanlder());  
  15.         // 开启服务器   
  16.         int bindPort = 9988;  
  17.         try {  
  18.                       acceptor.bind(new InetSocketAddress(bindPort));  
  19.         } catch (IOException e) {  
  20.                             e.printStackTrace();  
  21.                   }  
  22.     }  
  23.   
  24. }  

          .  创建消息处理类  

[java] view plaincopyprint?
  1. <p>import org.apache.mina.core.service.IoHandlerAdapter;  
  2. import org.apache.mina.core.session.IdleStatus;  
  3. import org.apache.mina.core.session.IoSession;</p><p>public class MinaServerHanlder extends IoHandlerAdapter {  
  4.  private int count = 0;</p><p> // 由底层决定是否创建一个session  
  5.  public void sessionCreated(IoSession session) {  
  6.   System.out.println("新客户连接");  
  7.  }</p><p> // 创建了session 后会回调sessionOpened  
  8.  public void sessionOpened(IoSession session) throws Exception {  
  9.   count++;  
  10.   System.out.println("第 " + count + " 个 client 登陆!address: : "  
  11.     + session.getRemoteAddress());  
  12.  }</p><p> // 当收到了客户端发送的消息后会回调这个函数  
  13.  public void messageReceived(IoSession session, Object message)  
  14.    throws Exception {  
  15.         System.out.println("服务器收到客户端发送指令 :" + message);</p><p> }</p><p> // 发送成功后会回调的方法  
  16.  public void messageSent(IoSession session, Object message) {  
  17.   System.out.println("message send to client");  
  18.  }</p><p> // session 关闭调用  
  19.  public void sessionClosed(IoSession session) {  
  20.   System.out.println("one client disconnect");  
  21.  }</p><p> // session 空闲的时候调用  
  22.  public void sessionIdle(IoSession session, IdleStatus status) {  
  23.   System.out.println("connect idle");  
  24.  }</p><p> // 异常捕捉  
  25.  public void exceptionCaught(IoSession session, Throwable cause) {  
  26.   System.out.println("throws exception");  
  27.  }  
  28. }</p>  
  29.     

      Client 端

       Client 端的创建方式和服务器类似的

          创建客户端

      

[java] view plaincopyprint?
  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"9988));  
  26.              cf.awaitUninterruptibly();  
  27.              cf.getSession().getCloseFuture().awaitUninterruptibly();  
  28.              connector.dispose();  
  29.                
  30.     }  
  31.   
  32. }  

 

          创建客户端消息处理

[java] view plaincopyprint?
  1. <p>import org.apache.mina.core.service.IoHandlerAdapter;  
  2. import org.apache.mina.core.session.IoSession;</p><p>  
  3. public class MinaClientHanlder extends IoHandlerAdapter {  
  4.  public void sessionOpened(IoSession session) throws Exception {  
  5.      System.out.println("客户端登陆");  
  6.      session.write("hello world");  
  7.  }  
  8.       
  9.  public void sessionClosed(IoSession session)  
  10.  {  
  11.    System.out.println("client close");  
  12.  }  
  13.    
  14.  public void messageReceived(IoSession session , Object message)throws Exception  
  15.  {  
  16.   System.out.println("客户端接受到了消息") ;  
  17.     
  18.  }  
  19. }</p><strong>运行结果</strong>  

server : 
新客户连接
第 1 个 client 登陆!address: : /127.0.0.1:55497
服务器收到客户端发送指令 :hello world

client :

客户端登陆

后记 :本来想上传图片的,可惜CSDN 这个上传图片那叫一个慢啊。无奈了....如果有什么问题可以回复我。


原文:http://blog.csdn.net/pdw_jsp/article/details/8603224

0 0
原创粉丝点击