首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > 移动开发 >

Mina 环境筹建

2013-02-24 
Mina 环境搭建最近在学习服务器,而对JAVA又比较熟悉的我就开始了学习服务器了。可能很多人会说还是用c吧,不

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

            

public class MinaServer {public static void main(String[] args){//创建ServerScoketSocketAcceptor acceptor = new NioSocketAcceptor();//设置传输方式(这里设置成对象传输模式,还有很多的类型后面会具体讲到DefaultIoFilterChainBuilder chain = acceptor.getFilterChain();ProtocolCodecFilter filter = new ProtocolCodecFilter(new ObjectSerializationCodecFactory());chain.addLast("objectFilter", filter);// 添加消息处理acceptor.setHandler(new MinaServerHanlder());// 开启服务器 int bindPort = 9988;try {                      acceptor.bind(new InetSocketAddress(bindPort));} catch (IOException e) {                            e.printStackTrace();                  }}}

          .  创建消息处理类  

import org.apache.mina.core.service.IoHandlerAdapter;import org.apache.mina.core.session.IdleStatus;import org.apache.mina.core.session.IoSession;

public class MinaServerHanlder extends IoHandlerAdapter { private int count = 0;

 // 由底层决定是否创建一个session public void sessionCreated(IoSession session) {  System.out.println("新客户连接"); }

 // 创建了session 后会回调sessionOpened public void sessionOpened(IoSession session) throws Exception {  count++;  System.out.println("第 " + count + " 个 client 登陆!address: : "    + session.getRemoteAddress()); }

 // 当收到了客户端发送的消息后会回调这个函数 public void messageReceived(IoSession session, Object message)   throws Exception {        System.out.println("服务器收到客户端发送指令 :" + message);

 }

 // 发送成功后会回调的方法 public void messageSent(IoSession session, Object message) {  System.out.println("message send to client"); }

 // session 关闭调用 public void sessionClosed(IoSession session) {  System.out.println("one client disconnect"); }

 // session 空闲的时候调用 public void sessionIdle(IoSession session, IdleStatus status) {  System.out.println("connect idle"); }

 // 异常捕捉 public void exceptionCaught(IoSession session, Throwable cause) {  System.out.println("throws exception"); }}

  

      Client 端

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

          创建客户端

      

import java.net.InetSocketAddress;import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder;import org.apache.mina.core.future.ConnectFuture;import org.apache.mina.filter.codec.ProtocolCodecFilter;import org.apache.mina.filter.codec.serialization.ObjectSerializationCodecFactory;import org.apache.mina.transport.socket.nio.NioSocketConnector;public class MinaClient {public static void main(String[] args) {// TODO Auto-generated method stub            // 创建Socket             NioSocketConnector connector = new NioSocketConnector();             //设置传输方式             DefaultIoFilterChainBuilder chain = connector.getFilterChain();             ProtocolCodecFilter filter = new ProtocolCodecFilter(new ObjectSerializationCodecFactory());             chain.addLast("objectFilter", filter);             //设置消息处理             connector.setHandler(new MinaClientHanlder());             //超时设置             connector.setConnectTimeoutCheckInterval(30);             //连接             ConnectFuture cf = connector.connect(new InetSocketAddress("localhost", 9988));             cf.awaitUninterruptibly();             cf.getSession().getCloseFuture().awaitUninterruptibly();             connector.dispose();             }}

 

          创建客户端消息处理

import org.apache.mina.core.service.IoHandlerAdapter;import org.apache.mina.core.session.IoSession;

public class MinaClientHanlder extends IoHandlerAdapter { public void sessionOpened(IoSession session) throws Exception {     System.out.println("客户端登陆");     session.write("hello world"); }     public void sessionClosed(IoSession session) {   System.out.println("client close"); }  public void messageReceived(IoSession session , Object message)throws Exception {  System.out.println("客户端接受到了消息") ;   }}

运行结果

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

client :

客户端登陆

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

 

 

 

2楼pdw_jsp鏄ㄥぉ 20:47
CSDN 涓婇潰鐨勪唬鐮佹帓鐗堬紝涓轰粈涔堜細閭f牱鐨勫憿 锛熷ソ鎭跺績鍟婏紝杩樻湁灏辨槸鍥剧墖涓婁紶鐪熷績鎱㈠晩
1楼fire_work鏄ㄥぉ 17:26
椤朵竴涓?,"ParentId

热点排行