`
jean7155
  • 浏览: 62775 次
  • 性别: Icon_minigender_2
  • 来自: 上海
社区版块
存档分类
最新评论

ApacheMina:ObjectSerializationCodecFactory的例子

阅读更多
1. 定义发送的RequestObject和返回的ResponseObject
RequestObject.java
public class RequestObject implements Serializable {
	
	private static final long serialVersionUID = 8891436114296586399L;

	private int id;
	private String name;
	private String description;
	private String others;
	
	
	public RequestObject(int id, String name, String description, String others) {
		super();
		this.id = id;
		this.name = name;
		this.description = description;
		this.others = others;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getDescription() {
		return description;
	}
	public void setDescription(String description) {
		this.description = description;
	}
	public String getOthers() {
		return others;
	}
	public void setOthers(String others) {
		this.others = others;
	}
	@Override
	public String toString() {
		return "RequestObject [id=" + id + ", name=" + name + ", description="
				+ description + ", others=" + others + "]";
	}

}


ResponseObject.java
public class ResponseObject implements Serializable {

	
	private static final long serialVersionUID = -6783592807728197249L;

	private int id;
	private String name;
	private String value;
	private String remarks;
	
	
	public ResponseObject(int id, String name, String value, String remarks) {
		super();
		this.id = id;
		this.name = name;
		this.value = value;
		this.remarks = remarks;
	}


	public int getId() {
		return id;
	}


	public void setId(int id) {
		this.id = id;
	}


	public String getName() {
		return name;
	}


	public void setName(String name) {
		this.name = name;
	}


	public String getValue() {
		return value;
	}


	public void setValue(String value) {
		this.value = value;
	}


	public String getRemarks() {
		return remarks;
	}


	public void setRemarks(String remarks) {
		this.remarks = remarks;
	}


	@Override
	public String toString() {
		return "ResponseObject [id=" + id + ", name=" + name + ", value="
				+ value + ", remarks=" + remarks + "]";
	}

	
}

2. 定义Server端的链接接收和业务处理机制
DemoObjectServer.java
public class DemoObjectServer {

	/**
	 * @param args
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException {
		
		final int PORT = 9123;
		
		// objects used to listen for incoming connection
		IoAcceptor acceptor = new NioSocketAcceptor();
		
		// filters:
		// 1. log all information
		acceptor.getFilterChain().addLast("logger", new LoggingFilter());
		// 2. translate binary or protocol specific data into message object
		acceptor.getFilterChain().addLast("codec",new ProtocolCodecFilter(new ObjectSerializationCodecFactory()));
		
		// define the handler used to service client connections and the requests for the current time
		acceptor.setHandler(new DemoObjectServerHandler());
		//NioSocketAcceptor configuration: for the socket that will be used to accept connections from client
		acceptor.getSessionConfig().setReadBufferSize(2048);
		acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10);
		
		// define the handler class and bind the NioSocketAcception to a port
		acceptor.bind(new InetSocketAddress(PORT));

	}

}



DemoObjectServerHandler.java
public class DemoObjectServerHandler extends IoHandlerAdapter {
	
	public DemoObjectServerHandler(){
		super();
	}
	
	@Override
	public void messageReceived(IoSession session, Object obj) throws Exception {
		System.out.println("message received");
		
		RequestObject ro = (RequestObject) obj;
		System.out.println("request body:" + ro.toString());
		
		String _name = "request_" + ro.getId();
		String _remarks = "description is " + ro.getDescription() + ", and others is " + ro.getOthers();
		ResponseObject rpo = new ResponseObject(ro.getId(),_name, ro.getName(), _remarks);
		session.write(rpo);
		
	}

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


3. 定义Client端的链接和业务处理机制
DemoObjectClient.java
public class DemoObjectClient {

	/**
	 * @param args
	 * @throws InterruptedException 
	 */
	public static void main(String[] args) throws InterruptedException {
		
		// create a connector
	     NioSocketConnector connector = new NioSocketConnector();
	     //create a fitler chain
	   	 connector.getFilterChain().addLast("codec",new ProtocolCodecFilter(new ObjectSerializationCodecFactory()));
	   	 connector.getFilterChain().addLast("logger", new LoggingFilter());

	   	 // create iohandler
	     //DemoTimeClientHandler handler = new DemoTimeClientHandler("i am jeanjeanfang, hello dear!");
	     connector.setHandler(new DemoObjectClientHandler());
	       
	     //connector.setHandler(new ClientSessionHandler(values));

	     // bind to server
		 IoSession session;
		 for (;;) {
		    
		    	try {
		        
		    		ConnectFuture future = connector.connect(new InetSocketAddress("localhost", 9123));
		            future.awaitUninterruptibly();
		            session = future.getSession();
		            break;
		        } catch (RuntimeIoException e) {
		            System.err.println("Failed to connect.");
		            e.printStackTrace();
		            Thread.sleep(5000);
		        }
		 }

		    // wait until the summation is done
		    session.getCloseFuture().awaitUninterruptibly();
		        
		    connector.dispose();


		}

	

}


DemoObjectClientHandler.java
public class DemoObjectClientHandler extends IoHandlerAdapter {

	@Override
	public void exceptionCaught(IoSession session, Throwable t)
			throws Exception {
		super.exceptionCaught(session, t);
		session.close(true);
	}

	@Override
	public void messageReceived(IoSession session, Object obj) throws Exception {
		System.out.println("message received");
		
		ResponseObject ro = (ResponseObject) obj;
		System.out.println("received obj:" + ro.toString());
		
		session.close(true);
		

	}

	@Override
	public void sessionOpened(IoSession session) throws Exception {
		System.out.println("session opened");
		
		RequestObject ro = new RequestObject(101,"name","des11","others...");
		
		session.write(ro);

	}

}

分享到:
评论

相关推荐

    Apache Mina核心jar包:mina-core-2.0.7

    Apache MINA是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架。 当前发行的 MINA 版本支持基于 Java NIO 技术的 TCP/UDP 应用程序开发、串口通讯程序(只在最新的预览版...

    apache-mina-2.0.4.rar_apache mina_mina

    Apache Mina是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。这个"apache-mina-2.0.4.rar"压缩包包含的是Apache Mina 2.0.4版本的源代码,是深入理解和定制Mina的...

    Apache Mina: 自定义codec

    NULL 博文链接:https://jean7155.iteye.com/blog/1954890

    apache-mina-2.0.4架包及源码各pdf学习教程

    apache-mina-2.0.4 架包 源码 学习教程.apache mina是Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架。当前发行的 MINA 版本支持基于 Java NIO 技术的 TCP/UDP 应用程序...

    Apache Mina Server 2.0中文参考手册V1.0,Apache Mina2.0学习笔记(修订版)

    Apache Mina Server 2.0中文参考手册V1.0,Apache Mina2.0学习笔记(修订版)Apache Mina Server 2.0中文参考手册V1.0,Apache Mina2.0学习笔记(修订版)

    apache-mina-2.0.16

    7. **LICENSE** 和 **NOTICE**:Apache软件基金会的许可文件,详细说明了软件的使用、分发和修改权限。 Apache MINA的核心特性包括: 1. **异步I/O**:基于Java NIO(非阻塞I/O)实现,提供高性能的网络通信。 2. *...

    apache-mina例子

    这个例子是关于如何使用Apache Mina实现一个简单的服务端和客户端通信的示例。在这个案例中,`MinaTimeServer`是服务端程序,它负责监听客户端的连接请求,并发送时间信息;而`MinaClient`则是客户端程序,它连接到...

    Apache MINA java UDP例子|byte数组

    最近做rfid读写,C#和java都用udp不用厂家的动态库,udp自己写也简单,但是试了一下Apache mina ,接收的不是string,二十byte[] 数组,简单实现了UDP,网上也有例子,但是不是我要的。可用。

    apache Mina的完整学习资料

    3. **Protocol Codec**:Apache Mina提供了多种编码器和解码器,如ByteToMessageDecoder和MessageToByteEncoder,用于处理不同协议的数据格式转换。 4. **NIO(Non-blocking I/O)**:Mina利用Java的NIO库,实现高效...

    Apache Mina帮助文档

    Apache Mina是一个高度可扩展的网络通信框架,主要用于构建高性能、高效率的服务端应用程序。它提供了事件驱动、异步I/O处理模型,使得开发者能够更专注于业务逻辑,而不是底层网络编程的复杂性。Mina主要应用于Java...

    Apache Mina 入门Demo

    1. **Mina架构**:Apache Mina的核心设计基于事件驱动和非阻塞I/O模型,这种模型特别适合处理大量并发连接。它将网络通信层抽象为一组服务,如TCP/IP协议栈,让你专注于业务逻辑而不是底层细节。 2. **IoSession...

    apache mina 学习笔记三(子项目FtpServer)

    Apache MINA(Multipurpose Infrastructure for Network Applications)是一个Java框架,用于构建高性能、高可用性的网络应用程序。MINA 提供了一种简单而强大的API,开发者可以使用它来处理TCP/IP和UDP/IP协议,如...

    apache mina实例免费下载

    Apache MINA(Multipurpose Infrastructure for Network Applications)是一个开源框架,主要设计用于简化网络应用程序的开发,尤其是基于TCP和UDP协议的应用。它提供了高度可扩展和高性能的非阻塞I/O模型,使得...

    Apache Mina Server 2.0 抢鲜体验

    Apache Mina Server 2.0 是一款高性能、可扩展的网络通信框架,广泛应用于开发网络应用服务器,如TCP/IP和UDP服务。这个框架允许开发者用Java编写高效的网络应用程序,简化了网络编程的复杂性。Mina 2.0 版本在前一...

    关于apache Mina Server

    深入理解Apache_Mina_(1)----_Mina的几个类 深入理解Apache_Mina_(2)----_与IoFilter相关的几个类 深入理解Apache_Mina_(3)----_与IoHandler相关的几个类 深入理解Apache_Mina_(4)----_IoFilter和IoHandler的区别和...

    Apache MINA 线程模型配置

    ### Apache MINA线程模型配置详解 #### 一、线程模型配置介绍 Apache MINA 是一个用于构建网络应用程序的高性能、高可靠性的框架。它提供了丰富的功能来简化网络编程,包括TCP/IP 和 UDP/IP 协议的支持。线程模型...

    Apache mina2学习笔记DEMO

    Apache MINA(Multipurpose Infrastructure for Network Applications)是一个Java框架,专为高性能、异步网络应用程序设计。MINA 提供了一套高级的网络通信抽象层,简化了开发过程,特别是对于处理TCP/IP和UDP/IP...

    Apache MINA 2.0 用户指南( 缺第一章节)

    ### Apache MINA 2.0 用户指南:基础知识 #### 基础概念介绍 Apache MINA 2.0 是一款高性能且易于使用的网络应用程序框架,它简化了开发人员在网络编程方面的负担,允许开发者专注于应用程序的核心功能,而不是底层...

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

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

    Apache MINA框架相关资料

    Apache MINA(Multipurpose Infrastructure for Network Applications)是一个高性能、异步事件驱动的网络应用程序框架,主要用于简化开发高质量的网络服务。这个框架适用于多种协议,如TCP/IP和UDP/IP,以及NIO(非...

Global site tag (gtag.js) - Google Analytics