`

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的~否则客户端与服务端编码不一致会出现解码失败的~

相关推荐

    mina2服务端客户端实例,保证能够正常运行

    2. 客户端代码:演示如何建立一个MINA客户端,连接到服务端,发送数据并接收回应。 3. 相关配置文件:可能包括服务器端和客户端的配置,如日志配置、线程池设置等。 4. 测试脚本或文档:解释如何运行示例,以及预期...

    Mina断包,粘包处理(完整实例,有客户端,服务端)

    本实例主要关注的是Mina在处理网络通信时遇到的两个常见问题——“断包”和“粘包”。 1. **断包**: 当数据在网络中传输时,可能会因为各种原因(如网络拥塞、数据包大小限制等)被分割成多个部分,这些部分在...

    java客户端socket与mina服务端通信

    Java客户端Socket与Mina服务端通信是网络编程中常见的应用场景,尤其在开发分布式系统或实时数据传输时。这里我们将深入探讨这两个技术,并了解如何通过它们建立保持长连接的通信。 首先,Socket是Java中用于实现...

    mina server开发服务端/客户端代码

    Apache Mina是一个开源的Java框架,主要用于简化网络应用的开发,...本压缩包中的服务端和客户端代码实例,是学习Mina和Java网络编程的宝贵资源。深入理解并实践这些代码,将有助于提升你在网络编程领域的专业技能。

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

    总结一下,这个"Mina开发实例"涵盖了如何使用Apache Mina创建服务端和客户端,通过Maven构建项目,并实现长连接通信。通过学习和实践这个DEMO,开发者可以掌握Mina的基本用法,为构建高性能、高并发的网络应用打下...

    Mina 服务端客户端示例程序

    5. **客户端构建**:客户端示例将演示如何使用IoConnector连接到服务端,同样也可以配置过滤器链和IoHandler来处理与服务端的通信。 6. **会话管理**:Mina中的IoSession对象代表了服务端和客户端之间的连接会话,...

    mina传文件案例,客户端加服务端

    1. 初始化IoAcceptor:Mina服务端首先需要创建一个IoAcceptor实例,用于监听特定端口的连接请求。通常使用NioSocketAcceptor,它基于Java的非阻塞I/O(NIO)模型,可以高效地处理大量并发连接。 2. 创建...

    MINA TCP简单通信实例

    总结起来,这个“MINA TCP简单通信实例”涵盖了使用MINA框架搭建TCP通信的基本步骤,包括服务端Acceptor的配置、客户端Connector的使用、IoHandler的实现以及数据的发送与接收。同时,通过阅读源码,开发者可以...

    mina 同步客户端,异步客户端

    Session是MINA的核心概念,它代表了服务端与客户端之间的一个连接实例。服务端通过定义Filter Chain(过滤器链)来处理接收到的数据,这些过滤器可以进行数据编码、解码、安全验证等多种任务。 2. **同步客户端**:...

    Apache Mina2服务器和客户端简单实例

    Apache Mina2是一个高度可扩展且高性能的网络通信框架,主要设计用于简化开发网络应用,如TCP/IP和UDP协议的服务端和客户端。它提供了一种事件驱动、非阻塞I/O模型,使得开发者能够更专注于业务逻辑,而不是底层的...

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

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

    服务端基于MINA2的UDP双向通信Demo演示(Java客户端)

    描述中提到的源码来源于《NIO框架入门(二):服务端基于MINA2的UDP双向通信Demo演示》这篇文章,这表明源码实例是为了解释和展示如何利用MINA2进行基于UDP的网络编程,特别是涉及到了非阻塞I/O(Non-blocking I/O, ...

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

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

    Mina server client实例

    这两个组件通过Java的NIO进行通信,允许客户端与服务器之间高效地交换数据。 **Mina Server** Mina Server是服务端部分,负责监听网络连接、处理客户端的请求并发送响应。它基于事件驱动模型,当有新的连接建立、...

    minaDemo的实例

    总之,"MinaDemo"是一个展示如何使用Apache MINA框架构建网络应用的实例,涵盖了服务端和客户端的基本操作,以及数据编码解码和事件处理等核心功能。通过深入研究这个示例,开发者可以更好地理解和运用MINA框架,...

    Java-mina实现推送

    在Java-Mina中,我们通常会创建一个`Acceptor`来监听客户端连接,并为每个新连接创建一个`Session`,每个`Session`对应一个独立的通信通道。 要实现服务端主动推送,我们需要以下关键步骤: 1. **配置Mina Server...

    mina2+spring结合实例

    《Mina2与Spring整合应用实战》 在Java开发领域,Apache Mina和Spring框架的结合使用能够构建高效、可扩展的网络应用。Mina2作为一个轻量级的网络通信框架,提供了高度抽象的API,使得开发者可以方便地处理网络I/O...

    mina2 实例程序(socket通讯调用远程方法)

    Session代表了客户端与服务端的连接状态,Filter用于处理网络通信中的数据过滤和转换,而ProtocolHandler则负责具体协议的解析和编码。 2. **建立Socket连接** 使用Mina2创建Socket连接,首先需要定义一个服务端的...

Global site tag (gtag.js) - Google Analytics