`
tomotoboy
  • 浏览: 162781 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Mina入门

    博客分类:
  • Mina
阅读更多
Mina是什么?Apache的定义如下:
Apache MINA is a network application framework which helps users develop high performance and high scalability network applications easily. It provides an abstract · event-driven · asynchronous API over various transports such as TCP/IP and UDP/IP via Java NIO.
Mina是一个网络应用架构,它能帮助我们很轻松的开发出功能强大、可控性强的网络应用。它在 TCP/IP及UDP/IP的基础上通过 Java NIO提供了一个抽象的事件驱动的异步传输消息的编程接口。目前最新版本是:Apache MINA 2.0.0-M5 release。
根据Mina的样例,我将演示一个HelloWorldServer和HelloWordClient的创建

准备工作
您需要准备如下包:

下载地址如下:
mina-2.0.0-M5.zip:http://mina.apache.org/index.html
slf4j-1.5.6.zip:www.slf4j.org
准备好之后,编写HelloWorldServerHandler
package com.ysh.mina.sampleserver;

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

public class HelloWorldServerHandler extends IoHandlerAdapter {
	//当一个客端端连结进入时
	@Override
	public void sessionOpened(IoSession session) throws Exception {
			System.out.println("incomming client : "+session.getRemoteAddress());
		
	}
		
	//当一个客户端关闭时
	@Override
	public void sessionClosed(IoSession session) {
	System.out.println("one Clinet Disconnect !");
	}
	
	//当客户端发送的消息到达时:
	@Override
	public void messageReceived(IoSession session, Object message) throws Exception 
	{
		//我们己设定了服务器解析消息的规则是一行一行读取,这里就可转为String:
		String s=(String)message;
		// Write the received data back to remote peer
		System.out.println("收到客户机发来的消息: "+s);
		session.write("Hello Word: "+"Greeting From Server");
	}	
}


编写HelloWorld服务器端启动程序HelloWorldServer
package com.ysh.mina.sampleserver;

import java.net.InetSocketAddress;

import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.transport.socket.SocketAcceptor;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;

public class HelloWorldServer {
	public static void main(String[] args) {
		
		 
		try{
			//创建一个非阻塞的Server端Socket,用NIO
			SocketAcceptor acceptor = new NioSocketAcceptor();		
			
			//创建接收数据的过滤器
			DefaultIoFilterChainBuilder chain = acceptor.getFilterChain();
			
			//设定这个过滤器将一行一行(/r/n)的读取数据
			chain.addLast("myChin", new ProtocolCodecFilter(new	TextLineCodecFactory()));
			
			//设定服务器端的消息处理器:一个SamplMinaServerHandler对象,
			acceptor.setHandler(new HelloWorldServerHandler());		
			
			// 服务器端绑定的端口
			int bindPort=9988;			
			
			//绑定端口,启动服务器
			acceptor.bind(new InetSocketAddress(bindPort));
			System.out.println("Mina Server is Listing on:= " + bindPort);
			
		}
		catch (Exception e)
		{
			e.printStackTrace();
		}	
	
	}
}


接着编写HelloWorldClientHandler
package com.ysh.mina.sampleclient;

import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IoSession;
public class HelloWorldClientHandler extends IoHandlerAdapter{
	
	//当一个客端端连结进入时
	@Override
	public void sessionOpened(IoSession session) throws Exception {				
		session.write("Hello World: server :"+ "Client: "+session.getRemoteAddress()+" is coming!");
	}
	
	//当一个客户端关闭时
	@Override
	public void sessionClosed(IoSession session) {
		System.out.println("Clinet"+session.getRemoteAddress()+" is disconnected!");
	}
	
	//当服务器端发送的消息到达时:
	@Override
	public void messageReceived(IoSession session, Object message)throws Exception {
		
		//我们己设定了服务器解析消息的规则是一行一行读取,这里就可转为String:		
		String s=(String)message;		
		System.out.println("收到服务器发来的消息: "+s);		
		
	}
}


编写我们的客户端程序和服务器端很相似HelloWorldClient

package com.ysh.mina.sampleclient;

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.textline.TextLineCodecFactory;
import org.apache.mina.transport.socket.nio.NioSocketConnector;

public class HelloWorldClient {
	public static void main(String[] args) throws Exception {
		//实际应用中,这里可以生成一个线程来监听			
		// Create TCP/IP connector.
		NioSocketConnector connector = new NioSocketConnector();
		
		// 创建接收数据的过滤器		
		DefaultIoFilterChainBuilder chain = connector.getFilterChain();
		
		//设定这个过滤器将一行一行(/r/n)的读取数据		
		chain.addLast("myChin", new ProtocolCodecFilter(new TextLineCodecFactory()));
		
		//设定服务器端的消息处理器:一个SamplMinaServerHandler对象,		
		connector.setHandler(new HelloWorldClientHandler());
		
		connector.setConnectTimeoutCheckInterval(3000000);
		
		//连结到服务器:
		try
		{
			ConnectFuture cf = connector.connect(new InetSocketAddress("localhost", 9988));
			cf.awaitUninterruptibly();
			cf.getSession().getCloseFuture().awaitUninterruptibly();			
			
		}
		catch(Exception e)
		{
			connector.dispose();
			System.out.println("未能连接到服务器");
		}
	}
}

大功告成:可以运行了。。。。
  • 大小: 3 KB
分享到:
评论

相关推荐

    Apache Mina入门(完成版)

    这个网上一个牛人写的mina入门知识, 里面有基础介绍和项目开发步骤。 入门还是不错的,写的挺详细。 我把项目也加进来了。

    mina入门例子

    mina的入门例子

    mina入门实例

    mina 基础的入门实例,使用maven+jdk1.7进行构建,使用客户端直接可以进行测试

    ApacheMina入门

    ApacheMina入门 ApacheMina入门 ApacheMina入门 ApacheMina入门 ApacheMina入门

    mina 入门 教程

    mina 入门 教程

    Mina入门:mina版之HelloWorld

    NULL 博文链接:https://mina-java.iteye.com/blog/1115429

    Apache Mina 入门Demo

    NULL 博文链接:https://royal2xiaose.iteye.com/blog/1558322

    Apache Mina入门

    Apache Mina入门 Mina能干什么?先拉出来溜一下:我们用它做两个小程序,一个为服务器,收到客户机的消息 后,就回送给客户机;一个是简单的客户机,一连上服务器,就发一条消息报到,然后将从服务 器接到的消息再...

    Apache+Mina入门基础

    mina是一种高效的互联网网络通信架构,此资料为入门基础。

    ApacheMina入门(完成版)

    NULL 博文链接:https://jzkangta.iteye.com/blog/916292

    Apache_Mina2.0学习笔记

    Mina入门 2 第一步.下载使用的Jar包 2 第二步.工程创建配置 2 第三步.服务端程序 3 第四步.客户端程序 6 第五步.长连接VS短连接 8 二. Mina基础 9 1.IoService接口 10 2.1.1 类结构 11 2.1.2 应用 12 2.IoFilter...

    Mina2.0完全剖析,完全自学手册【完整版】.doc

    一. Mina入门 2 第一步.下载使用的Jar包 2 第二步.工程创建配置 2 第三步.服务端程序 3 第四步.客户端程序 6 第五步.长连接VS短连接 8 二. Mina基础 9 1.IoService接口 10 2.1.1 类结构 11 2.1.2 应用 12 2....

    Mina2.0快速入门与源码剖析

    Mina2.0快速入门与源码剖析(个人经验文档)

    mina入门程序

    博文链接:https://aga.iteye.com/blog/174428

    Mina入门程序

    NULL 博文链接:https://shihuan830619.iteye.com/blog/1547229

Global site tag (gtag.js) - Google Analytics