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)
	{
		//创建ServerScoket
		SocketAcceptor 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 :

客户端登陆

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

 

 

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值