`
Donald_Draper
  • 浏览: 979982 次
社区版块
存档分类
最新评论

Mina 报文通信简单示例

    博客分类:
  • Mina
阅读更多
MINA TCP简单通信实例:http://donald-draper.iteye.com/blog/2375297
MINA 编解码器实例:http://donald-draper.iteye.com/blog/2375317
MINA 多路分离解码器实例:http://donald-draper.iteye.com/blog/2375324
Mina Socket会话配置:http://donald-draper.iteye.com/blog/2375529
Mina Socket与报文过滤链:http://donald-draper.iteye.com/blog/2376440
Mina 协议编解码过滤器一(协议编解码工厂、协议编码器):
http://donald-draper.iteye.com/blog/2376663
Mina 协议编解码过滤器二(协议解码器):
http://donald-draper.iteye.com/blog/2376679
Mina 队列Queue:http://donald-draper.iteye.com/blog/2376712
Mina 协议编解码过滤器三(会话write与消息接收过滤):
http://donald-draper.iteye.com/blog/2376818
Mina 累计协议解码器:http://donald-draper.iteye.com/blog/2377029
MINA 多路复用协议编解码器工厂一(多路复用协议编码器):
http://donald-draper.iteye.com/blog/2377170
MINA 多路复用协议编解码器工厂二(多路复用协议解码器):
http://donald-draper.iteye.com/blog/2377324
Mina IoHandler接口定义:http://donald-draper.iteye.com/blog/2377419
Mina Nio会话(Socket,DataGram):http://donald-draper.iteye.com/blog/2378169
Mina Nio处理器:http://donald-draper.iteye.com/blog/2377725
Mina socket监听器(NioSocketAcceptor):http://donald-draper.iteye.com/blog/2378668
Mina socket连接器(NioSocketConnector):http://donald-draper.iteye.com/blog/2379000
前面的文章我们关注时Mina的socket通信,从今天起,我们来看一下报文通信,从一个实例开始:
Server-peer:
package mina.udp.main;

import java.net.InetSocketAddress;

import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder;
import org.apache.mina.core.service.IoAcceptor;
import org.apache.mina.filter.logging.LoggingFilter;
import org.apache.mina.transport.socket.DatagramSessionConfig;
import org.apache.mina.transport.socket.nio.NioDatagramAcceptor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import mina.udp.handler.UdpServerHandler;
/**
 * NioDatagramAcceptor Server peer
 * @author donald
 * 2017年5月18日
 * 下午9:59:13
 */
public class UdpServer {
	private  static final Logger log = LoggerFactory.getLogger(UdpServer.class);
	private static final  String ip = "192.168.31.153";
	private static final  int port = 9122;
	
	public static void main(String[] args) throws Exception {
		IoAcceptor acceptor = new NioDatagramAcceptor();
		//配置会话Handler
		UdpServerHandler udpServerHandler = new UdpServerHandler();
		acceptor.setHandler(udpServerHandler);
		//配置过滤器
		DefaultIoFilterChainBuilder  defaultIoFilterChainBuilder = acceptor.getFilterChain();
		defaultIoFilterChainBuilder.addLast("logger", new LoggingFilter());
		//配置会话
		DatagramSessionConfig datagramSessionConfig = (DatagramSessionConfig) acceptor.getSessionConfig();
		datagramSessionConfig.setReuseAddress(true);
		//绑定地址
		InetSocketAddress inetSocketAddress = new InetSocketAddress(ip,port);
		acceptor.bind(inetSocketAddress);
		log.info("=========Udp Server peer is start...");
	}
}

server-handler:
package mina.udp.handler;

import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
import java.nio.charset.CharsetEncoder;

import org.apache.mina.core.buffer.IoBuffer;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
 * Udp Server peer handler
 * @author donald
 * 2017年5月18日
 * 下午10:00:21
 */
public class UdpServerHandler extends IoHandlerAdapter {
	private  static final Logger log = LoggerFactory.getLogger(UdpServerHandler.class);
	private  static final CharsetEncoder charsetEncoder= Charset.forName("UTF-8").newEncoder();
	private static final CharsetDecoder charsetDecoder= Charset.forName("UTF-8").newDecoder();
	public void messageReceived(IoSession session, Object message) throws Exception {
		IoBuffer buffer = (IoBuffer) message;
		String msg = buffer.getString(buffer.limit(),charsetDecoder);
		log.info("=========The message received from Server peer is:" + msg);
		buffer.clear();
		buffer.putString("Hello Client peer...", charsetEncoder);
		buffer.flip();
		session.write(buffer);
	}

	@Override
	public void sessionClosed(IoSession session) throws Exception {
		log.debug("=========Session Closed...");
	}

	@Override
	public void sessionCreated(IoSession session) throws Exception {
		log.debug("=========Session Created...");
	}

	@Override
	public void sessionIdle(IoSession session, IdleStatus status) throws Exception {
		log.debug(session + "=========Session Idle...");
	}

	@Override
	public void sessionOpened(IoSession session) throws Exception {
		log.debug("=========Session Opened...");
	}

	@Override
	public void exceptionCaught(IoSession session, Throwable cause) throws Exception {
		log.error(cause.getMessage());
		session.closeNow();
	}

	@Override
	public void messageSent(IoSession session, Object message) throws Exception {
		log.debug("******************* messageSent...");
	}
}

client-peer:
package mina.udp.main;

import java.net.InetSocketAddress;

import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder;
import org.apache.mina.core.future.ConnectFuture;
import org.apache.mina.core.service.IoConnector;
import org.apache.mina.filter.logging.LoggingFilter;
import org.apache.mina.transport.socket.nio.NioDatagramConnector;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import mina.udp.handler.UdpClientHandler;
/**
 * NioDatagramConnector Client peer
 * @author donald
 * 2017年5月18日
 * 下午10:19:35
 */
public class UdpClient {
	private  static final Logger log = LoggerFactory.getLogger(UdpClient.class);
	private static final String ip = "192.168.31.153";
	private static final int port = 9122;
	public static void main(String[] args) throws Exception {
		IoConnector connector = new NioDatagramConnector();
		//配置会话Handler
		UdpClientHandler udpClientHandler = new UdpClientHandler();
		connector.setHandler(udpClientHandler);
		//配置过滤器
		DefaultIoFilterChainBuilder  defaultIoFilterChainBuilder = connector.getFilterChain();
		defaultIoFilterChainBuilder.addLast("logger", new LoggingFilter());
		InetSocketAddress inetSocketAddress = new InetSocketAddress(ip,port);
		//连接远端peer
		ConnectFuture connFuture = connector.connect(inetSocketAddress);
		connFuture.awaitUninterruptibly();
		log.info("=========Udp Client peer is start...");
	}
}


client-handler:
package mina.udp.handler;

import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
import java.nio.charset.CharsetEncoder;

import org.apache.mina.core.buffer.IoBuffer;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
 * Udp Client peer handler
 * @author donald
 * 2017年5月18日
 * 下午10:24:45
 */
public class UdpClientHandler extends IoHandlerAdapter {
	private  static final Logger log = LoggerFactory.getLogger(UdpClientHandler.class);
	private  static final CharsetEncoder charsetEncoder= Charset.forName("UTF-8").newEncoder();
	private static final CharsetDecoder charsetDecoder= Charset.forName("UTF-8").newDecoder();
	public void messageReceived(IoSession session, Object message) throws Exception {
		IoBuffer buffer = (IoBuffer) message;
		String msg = buffer.getString(buffer.limit(),charsetDecoder);
		log.info("=========The message received from Server peer is:" + msg);
	}

	@Override
	public void sessionClosed(IoSession session) throws Exception {
		log.debug("=========Session Closed...");
	}

	@Override
	public void sessionCreated(IoSession session) throws Exception {
		log.debug("=========Session Created...");
	}

	@Override
	public void sessionIdle(IoSession session, IdleStatus status) throws Exception {
		log.debug(session + "=========Session Idle...");
	}

	@Override
	public void sessionOpened(IoSession session) throws Exception {
		log.debug("=========Session Opened...");
		IoBuffer buffer = IoBuffer.allocate(1024);
		buffer.putString("Hello server peer...", charsetEncoder);
		buffer.flip();
		session.write(buffer);
	}

	@Override
	public void exceptionCaught(IoSession session, Throwable cause) throws Exception {
		log.error(cause.getMessage());
		session.closeNow();
	}

	@Override
	public void messageSent(IoSession session, Object message) throws Exception {
		log.debug("=========messageSent...");
	}
}

启动server&client peer,控制台输出:
server peer:
[INFO ] 2017-06-12 09:01:05 mina.udp.main.UdpServer =========Udp Server peer is start...
[INFO ] 2017-06-12 09:01:15 org.apache.mina.filter.logging.LoggingFilter CREATED
[DEBUG] 2017-06-12 09:01:15 mina.udp.handler.UdpServerHandler =========Session Created...
[INFO ] 2017-06-12 09:01:15 org.apache.mina.filter.logging.LoggingFilter OPENED
[DEBUG] 2017-06-12 09:01:15 mina.udp.handler.UdpServerHandler =========Session Opened...
[INFO ] 2017-06-12 09:01:15 org.apache.mina.filter.logging.LoggingFilter RECEIVED: HeapBuffer[pos=0 lim=20 cap=2048: 48 65 6C 6C 6F 20 73 65 72 76 65 72 20 70 65 65...]
[INFO ] 2017-06-12 09:01:15 mina.udp.handler.UdpServerHandler =========The message received from Server peer is:Hello server peer...
[INFO ] 2017-06-12 09:01:15 org.apache.mina.filter.logging.LoggingFilter SENT: HeapBuffer[pos=0 lim=20 cap=2048: 48 65 6C 6C 6F 20 43 6C 69 65 6E 74 20 70 65 65...]
[DEBUG] 2017-06-12 09:01:15 mina.udp.handler.UdpServerHandler ******************* messageSent...

client peer:

[INFO ] 2017-06-12 09:01:15 org.apache.mina.filter.logging.LoggingFilter CREATED
[DEBUG] 2017-06-12 09:01:15 mina.udp.handler.UdpClientHandler =========Session Created...
[INFO ] 2017-06-12 09:01:15 mina.udp.main.UdpClient =========Udp Client peer is start...
[INFO ] 2017-06-12 09:01:15 org.apache.mina.filter.logging.LoggingFilter OPENED
[DEBUG] 2017-06-12 09:01:15 mina.udp.handler.UdpClientHandler =========Session Opened...
[INFO ] 2017-06-12 09:01:15 org.apache.mina.filter.logging.LoggingFilter SENT: HeapBuffer[pos=0 lim=20 cap=1024: 48 65 6C 6C 6F 20 73 65 72 76 65 72 20 70 65 65...]
[DEBUG] 2017-06-12 09:01:15 mina.udp.handler.UdpClientHandler =========messageSent...
[INFO ] 2017-06-12 09:01:15 org.apache.mina.filter.logging.LoggingFilter RECEIVED: HeapBuffer[pos=0 lim=20 cap=2048: 48 65 6C 6C 6F 20 43 6C 69 65 6E 74 20 70 65 65...]
[INFO ] 2017-06-12 09:01:15 mina.udp.handler.UdpClientHandler =========The message received from Server peer is:Hello Client peer...

0
2
分享到:
评论
1 楼 张志远aa 2017-06-12  
求博主头像啊!

相关推荐

    mina客户端简单代码示例

    Apache Mina是一个开源的网络通信框架,主要用于简化Java应用程序与远程服务器之间的通信。它提供了高度可扩展和高性能的网络协议处理能力,支持多种传输层协议,如TCP/IP、UDP/IP和SSL/TLS等。在本示例中,我们关注...

    Mina通信框架应用示例

    2. Mina简单入门 开发MINA应用通常涉及以下步骤: - 下载MINA库:访问官网http://mina.apache.org/获取最新版本的MINA库。 - 创建项目:在IDE中创建新项目,并将MINA核心库mina-core添加至项目依赖。 - 编写...

    Mina自定义协议通信的示例

    本示例聚焦于Mina中的自定义协议通信,这允许开发人员根据特定需求设计通信协议,而不是局限于预设的如TCP或UDP等标准协议。 首先,我们要理解Mina的基本工作原理。Mina提供了一个事件驱动的异步I/O模型,使得处理...

    mina的高级使用,mina文件图片传送,mina发送文件,mina报文处理,mina发送xml和json

    4. **Mina报文处理** Mina提供了一套灵活的消息处理机制。你可以定义自定义的协议解析器,将接收到的原始字节流转换为有意义的业务对象,比如XML或JSON报文。在接收端,这些对象会被反序列化,从而可以进行业务逻辑...

    apache mina 简单示例

    在"apache mina 简单示例"中,我们通常会涉及以下几个关键概念: 1. **项目设置**:首先,你需要在你的开发环境中集成Apache Mina库。这可以通过在Maven或Gradle的依赖管理中添加Mina的相关依赖来实现。例如,在...

    mina双向通信已测试

    本项目提供了一个完整的Mina双向通信示例,允许客户端和服务端互相发送消息。该demo的核心功能是接收用户输入的字符串并进行传输,适用于学习和理解Mina框架的通信机制。 **Mina框架** Mina采用事件驱动模型和非...

    mina服务器简单代码示例

    本示例将介绍如何使用Mina实现一个简单的服务器端代码,并运行MinaTimeServer。 在Java中,Mina提供了一种事件驱动、异步编程模型,使得开发者可以更高效地处理网络通信。其核心组件包括Acceptor(监听器)、...

    mina简单通信需要的包

    在描述中提到的博客链接(http://blog.csdn.net/guozeming122/article/details/18552483)可能提供了关于如何使用Mina进行简单通信的详细步骤和示例。虽然无法直接访问该链接,但我们可以理解这个博客可能涵盖了Mina...

    mina简单示例

    描述中的"mina简单客户端服务端示例"意味着我们将探讨如何使用Mina来创建一个基本的通信环境,包括一个能够发起连接的客户端和一个接收连接的服务端。这两个组件是任何网络通信系统的基础,通过它们,数据可以在不同...

    mina传输对象的示例

    在标题和描述中提到的“mina传输对象的示例”指的是如何在Mina框架下处理和传输自定义的数据对象。Mina允许开发者通过事件驱动和异步I/O模型来高效地构建网络服务。 Mina的核心组件包括: 1. **Session**: 表示...

    mina学习基础-入门实例-传输定长报文(三)

    在"mina学习基础-入门实例-传输定长报文(三)"这个主题中,我们将深入探讨如何使用Mina实现定长报文的传输,并且利用Mina内置的SSL过滤器进行报文加密。 首先,让我们了解什么是定长报文。在通信协议中,定长报文是...

    Mina自定义协议简单实现

    通过上述步骤,我们可以利用Mina框架实现一个简单的自定义通信协议,满足特定的业务需求。在实际开发中,还需要考虑性能优化、异常处理和测试等方面,确保系统的稳定性和可靠性。在设计协议时,要兼顾易用性、可扩展...

    Mina+Socket通信

    Mina(全称“MINA: Minimalistic Application Networking API”)是Apache软件基金会的一个开源项目,它为开发者提供了一种简单而高效的方式来构建高性能、跨平台的网络应用。Mina的核心优势在于它的事件驱动和异步I...

    mina双向通信demo

    自己写的demo,完成了mina的双向通信功能,比较简单的一个demo,扩展性强

    Mina 1.1.7 示例源码(apache.mina.example)

    Mina(Minimum Asynchronous Network)是一个基于Java的网络通信库,它提供了简单、高性能的API来处理I/O操作。Mina的目标是让开发者能够专注于业务逻辑,而不是底层网络协议的实现。它的异步事件驱动模型使得Mina...

    Mina网络通信传输

    在"实现了Mina框架简单的换行符编解码的服务器客户端通信"这一描述中,我们可以理解到项目使用了Mina提供的编码器和解码器机制。换行符编码器通常用于将包含换行符的数据转换为网络传输友好的格式,因为网络协议中...

    MINA TCP简单通信实例

    这个"MINA TCP简单通信实例"可能涉及到如何使用MINA来实现基于TCP协议的客户端和服务端之间的通信。 在TCP通信中,MINA提供了异步事件驱动的网络应用编程接口(API),它简化了处理网络I/O操作的复杂性。通过MINA,...

    mina 实现简单通讯

    总结来说,这个"mina 实现简单通讯"项目展示了一个基于Apache MINA的网络通信示例,涵盖了服务端和客户端的创建、自定义的协议编解码器、以及必要的网络配置。这为学习和理解MINA框架提供了一个基础平台,并且可以在...

    mina项目示例

    这个“mina项目示例”很可能是通过MINA框架实现了一个客户端和服务端的通信示例。它可能包括以下部分: 1. **服务端启动**:创建MINA服务器端,监听指定端口,设置相应的处理器和过滤器链。 2. **客户端连接**:...

    mina网络通信实例

    《MINA网络通信实例解析》 MINA(Multipurpose Infrastructure for Network Applications)是Apache软件基金会的一个开源项目,它提供了一个高度可扩展且跨平台的网络应用程序框架,主要用于简化开发高性能和高可用...

Global site tag (gtag.js) - Google Analytics