`

MINA客户端与服务端通信实例

    博客分类:
  • MINA
阅读更多

Apache MINA(Multipurpose Infrastructure for Network Applications) 是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便

  apache mina

apache mina

利的框架。当前发行的 MINA 版本支持基于 Java NIO 技术的 TCP/UDP 应用程序开发、串口通讯程序(只在最新的预览版中提供),MINA 所支持的功能也在进一步的扩展中。

 

需要导入的包:

log4j.jar

mina-core-2.0.4.jar 

slf4j-api-1.6.3.jar 

slf4j-log4j12-1.6.3.jar

 

服务端代码:

 

/**
 * @author aniyo
 * blog: http://aniyo.iteye.com
 */
public class MinaTimeServer {
                // 服务器监听端口
	private static final int PORT = 8888;
	
	/**
	 * 
	 */
	public MinaTimeServer() {
		// TODO Auto-generated constructor stub
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// 服务器端的主要对象
		IoAcceptor acceptor = new NioSocketAcceptor();
		
        // 设置Filter链 
		acceptor.getFilterChain().addLast("logger", new LoggingFilter());
        // 协议解析,采用mina现成的UTF-8字符串处理方式
		acceptor.getFilterChain().addLast("codec", new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8"))));
		
        // 设置消息处理类(创建、关闭Session,可读可写等等,继承自接口IoHandler)
		acceptor.setHandler(new TimeServerHandler() );
        // 设置接收缓存区大小
		acceptor.getSessionConfig().setReadBufferSize(2048);
		acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10);
		try {
            // 服务器开始监听
			acceptor.bind( new InetSocketAddress(PORT) );
		}catch(Exception e){
			e.printStackTrace();
		}
	}

}

 

 

服务端业务处理类:

package aniyo.mina.server;

import java.util.Date;

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

/**
 * @author aniyo
 * blog: http://aniyo.iteye.com
 * 继承自IoHandlerAdapter,IoHandlerAdapter继承接口 IoHandler
        类IoHandlerAdapter实现了IoHandler的所有方法,只要重载关心的几个方法就可以了
 */
public class TimeServerHandler extends IoHandlerAdapter {

	@Override
	public void exceptionCaught(IoSession session, Throwable cause)
			throws Exception {
		cause.printStackTrace();
	}

    /*
     * 这个方法是目前这个类里最主要的,
     * 当接收到消息,只要不是quit,就把服务器当前的时间返回给客户端
     * 如果是quit,则关闭客户端连接*/
	@Override
	public void messageReceived(IoSession session, Object message)
			throws Exception {
		String str = message.toString();
		if (str.trim().equalsIgnoreCase("quit")) {
			session.close();
			return;
		}
		Date date = new Date();
		System.out.println("hello"+str+session.getRemoteAddress()+date.toString());
		
		session.write("i am recived");
		System.out.println("Message written...");

	}
	
	@Override
	public void sessionClosed(IoSession session) throws Exception {
		// TODO Auto-generated method stub
		super.sessionClosed(session);
		System.out.println("客户端与服务端断开连接.....");
	}

}

 

 

客户端:

package aniyo.mina.server;
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;   
  
/**  
 * mina客户端  
 * @author aniyo   
 * blog:http://aniyo.iteye.com
 */  
public class MinaClient {   
  
    public static void main(String []args)throws Exception{   
           
        //Create TCP/IP connection   
        NioSocketConnector connector = new NioSocketConnector();   
           
        //创建接受数据的过滤器   
        DefaultIoFilterChainBuilder chain = connector.getFilterChain();   
           
        //设定这个过滤器将一行一行(/r/n)的读取数据   
        chain.addLast("myChin", new ProtocolCodecFilter(new TextLineCodecFactory()));   
           
        //客户端的消息处理器:一个SamplMinaServerHander对象   
        connector.setHandler(new MinaClientHandler());   
           
        //set connect timeout   
        connector.setConnectTimeout(30);   
           
        //连接到服务器:   
        ConnectFuture cf = connector.connect(new InetSocketAddress("localhost",8888));   
           
        //Wait for the connection attempt to be finished.   
        cf.awaitUninterruptibly();   
           
        cf.getSession().getCloseFuture().awaitUninterruptibly();   
           
        connector.dispose();   
    }  
}

 

客户端业务逻辑处理类:

package aniyo.mina.server;

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

/**
 * 客户端业务处理逻辑
 * 
 * @author aniyo blog: http://aniyo.iteye.com
 */
public class MinaClientHandler extends IoHandlerAdapter {
	// 当客户端连接进入时
	@Override
	public void sessionOpened(IoSession session) throws Exception {
		System.out.println("incomming 客户端: " + session.getRemoteAddress());
		session.write("i am coming");
	}

	@Override
	public void exceptionCaught(IoSession session, Throwable cause)
			throws Exception {
		System.out.println("客户端发送信息异常....");
	}

	// 当客户端发送消息到达时
	@Override
	public void messageReceived(IoSession session, Object message)
			throws Exception {

		System.out.println("服务器返回的数据:" + message.toString());
	}

	@Override
	public void sessionClosed(IoSession session) throws Exception {
		System.out.println("客户端与服务端断开连接.....");
	}

	@Override
	public void sessionCreated(IoSession session) throws Exception {
		// TODO Auto-generated method stub
		System.out
				.println("one Client Connection" + session.getRemoteAddress());
		session.write("我来了······");
	}

}

 

先启动服务器,再启动客户端,就ok了 

不写客户端也可用

在运行里输入cmd-->telnet localhost 8888  就可以了

 

 

分享到:
评论
5 楼 java029 2016-03-03  
有用的东东,谢谢!
4 楼 aniyo 2014-06-27  
knight_black_bob 写道
标准啊啊啊

呵呵,能有用就行, 这是之前学习的时候记下的
3 楼 knight_black_bob 2014-06-26  
标准啊啊啊
2 楼 aniyo 2013-12-19  
guoyang100 写道
楼主代码有问题啊~
chain.addLast("myChin", new ProtocolCodecFilter(new TextLineCodecFactory()));  
客户端这个地方应该设置一下CharSet的~否则客户端与服务端编码不一致会出现解码失败的~

那你设置一下吧,我当时应该是自己了解了一下这个东西。后面实际也没怎么用到。
1 楼 guoyang100 2013-12-18  
楼主代码有问题啊~
chain.addLast("myChin", new ProtocolCodecFilter(new TextLineCodecFactory()));  
客户端这个地方应该设置一下CharSet的~否则客户端与服务端编码不一致会出现解码失败的~

相关推荐

    Mina开发实例(服务端、客户端)DEMO

    Apache Mina Server 是一个网络通信应用框架,本项目是Mina开发的 服务端、客户端,例子,maven构建

    在Java中运用mina来实现TCP通信

    这是一个有关Mina在Java通信...这个实例中有客户端和服务端,与软件TCPUDPDbg进行文字通话测试。用的时候注意添加Mina包,此实例中用到的是mina-core-2.0.4包。 新手可以跟我一样从此实例入手,你会得到意外的收获滴。

    MINA通讯框架的两个简单实例和文档

    Apache的Mina(Multipurpose Infrastructure Networked Applications)是一个... 客户端/服务端框架(典型的C/S架构)  网络套接字(networking socket)类库  事件驱动的异步API(注意:在JDK7中也新增了异步API)

    mina 实现简单通讯

    实现了mina 的简单通信通信,内部配置了累积协议编解码器、工具类和客户端与服务端的端口配置。能够实现基本功能,下载完成需要四个基本jar包才能实现功能。我的博客上有相应资源支持下载。

    JAVA上百实例源码以及开源项目源代码

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...

    JAVA上百实例源码以及开源项目

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...

    java开源包1

    6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...

    java开源包2

    6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...

    java开源包3

    6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...

    java开源包6

    6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...

    java开源包5

    6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...

    java开源包10

    6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...

    java开源包8

    6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...

    java开源包7

    6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...

    java开源包9

    6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...

    java开源包11

    6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...

    java开源包4

    6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...

Global site tag (gtag.js) - Google Analytics