`

mina 的几个简单例子

    博客分类:
  • mina
阅读更多

 

 

mina 发送字符串给服务器,服务器读取的例子,两个文件

 

 

package test2;

import java.io.IOException;
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 MainServer {
	public static void main(String args[]) throws IOException{
		//创建一个非阻塞的Server端socket 用NIO
		SocketAcceptor acceptor = new NioSocketAcceptor();
		//创建接收数据的过滤器
		DefaultIoFilterChainBuilder chain= acceptor.getFilterChain();
		//设定这个过滤器一行一行的(/r/n)的读取数据
		chain.addLast("myChin", new ProtocolCodecFilter(new TextLineCodecFactory()));
		//设定服务器端的消息处理器 new 一个对象
		acceptor.setHandler(new SamplMinaServerHandler());
		//服务器绑定的端口
		int bindport=9988;
		//绑定端口,启动服务器
		acceptor.bind(new InetSocketAddress(bindport));
		System.out.println("start ok,listen on:="+bindport);
		
	}

}
 

 

 

 

package test2;

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

public class SamplMinaServerHandler extends IoHandlerAdapter {

	public SamplMinaServerHandler() {
		// TODO Auto-generated constructor stub
	}
	
	@Override
	public void sessionOpened(IoSession session )throws Exception{
		System.out.println("sessionOpened  incomming client :"+session.getRemoteAddress());
	}

	@Override
	public void exceptionCaught(IoSession session, Throwable cause)
			throws Exception {
		System.out.println("exceptionCaught");
	}

	@Override
	public void messageReceived(IoSession session, Object message)
			throws Exception {
		
		//需要设定服务器解析消息规则是一行一行的读取,这里可以转为string
		String str=(String)message;
		System.out.println("收到客户端信息:"+str);
		//将消息会送到客户端
		session.write(str);
		
		
	
		
		
		System.out.println("messageReceived");

	}
	

	@Override
	public void messageSent(IoSession session, Object message) throws Exception {
		// TODO Auto-generated method stub
		System.out.println("messageSent");
	}

	@Override
	public void sessionClosed(IoSession session) throws Exception {
		System.out.println("sessionClose");
	}

	@Override
	public void sessionCreated(IoSession session) throws Exception {
		// TODO Auto-generated method stub
	System.out.println("sessionCreate");
	}

	@Override
	public void sessionIdle(IoSession session, IdleStatus status)
			throws Exception {
		// TODO Auto-generated method stub
		System.out.println("sessionIdle");
	}

	


}
 

 

 

这两个是客户端,用于连接服务器

 

 

package client;

import java.net.InetSocketAddress;
import java.net.SocketAddress;
import java.nio.charset.Charset;

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

public class MyClient {
	public static void main(String args[]){
		//create tcp/ip connector 
	IoConnector connector = new NioSocketConnector();
	//创建接受数据的过滤器
	DefaultIoFilterChainBuilder chain=connector.getFilterChain();
	//设定这个过滤器一行一行(/r/n)的读取数据
			chain.addLast("myChin", new ProtocolCodecFilter(new TextLineCodecFactory()));
			//或者如下			
			//connector.getFilterChain().addLast("codec",  new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8"),LineDelimiter.WINDOWS.getValue(),LineDelimiter.WINDOWS.getValue())));
	//设定服务器端的消息处理器:new 一个clinethandler对象
			connector.setHandler(new SamplMinaClientHandler());
	//set connect timeout		
	connector.setConnectTimeoutMillis(30000);
	//或者connector.setConnectTimeout(30);
	//连接到服务器
	ConnectFuture cf= connector.connect(new InetSocketAddress("localhost",9988));
	//wait for the connection attem to be finished
	cf.awaitUninterruptibly();
	cf.getSession().getCloseFuture().awaitUninterruptibly();
	connector.dispose();
	
	}

}
 

 

 

 

 

 

 

 

package client;

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

public class SamplMinaClientHandler extends IoHandlerAdapter implements
		IoHandler {

	@Override
	public void exceptionCaught(IoSession session, Throwable cause)
			throws Exception {
		// TODO Auto-generated method stub
		super.exceptionCaught(session, cause);
	}

	@Override
	public void messageReceived(IoSession session, Object message)
			throws Exception {
		//我们已经设定了服务器的解析消息,(规则是一行一行的读取。这里就可以转为String)
	String s=(String)message;
	// write the receive date back to remote peer
	System.out.println("服务器发来的收到信息"+s);
	session.write(s);
	}

	@Override
	public void messageSent(IoSession session, Object message) throws Exception {
		// TODO Auto-generated method stub
		super.messageSent(session, message);
	}

	@Override
	public void sessionClosed(IoSession session) throws Exception {
		// TODO Auto-generated method stub
	System.out.println("sessionClosed");
	}

	@Override
	public void sessionCreated(IoSession session) throws Exception {
		// TODO Auto-generated method stub
		super.sessionCreated(session);
	}

	@Override
	public void sessionIdle(IoSession session, IdleStatus status)
			throws Exception {
		// TODO Auto-generated method stub
		super.sessionIdle(session, status);
	}

	@Override
	public void sessionOpened(IoSession session) throws Exception {
		// TODO Auto-generated method stub
		System.out.println("incomming client"+session.getRemoteAddress());
		session.write("我来啦...");
	}
	
	

}
 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

mina 的一个简单例子    时间服务器,实现最基本功能

 

 

package server;

import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.charset.Charset;

import org.apache.mina.core.service.IoAcceptor;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.example.gettingstarted.timeserver.TimeServerHandler;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.filter.logging.LoggingFilter;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;

public class MinaTimeServer {
	
private static final int PORT=6489;
public static void main(String args[]) throws IOException{
	IoAcceptor acceptor= new NioSocketAcceptor();
	acceptor.getFilterChain().addLast("logger", new LoggingFilter());
	acceptor.getFilterChain().addLast("codec", new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8"))));
	acceptor.setHandler(new TimeServerHandler());
	acceptor.getSessionConfig().setReadBufferSize(2048);
	acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10);
	acceptor.bind(new InetSocketAddress(PORT));
	System.out.println("service start");
	
}

}
 

 

 

 

 

package server;

import java.sql.Date;

import org.apache.mina.core.service.IoHandler;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;

public class TimeServerHandler implements IoHandler {

	public void exceptionCaught(IoSession session, Throwable cause)
			throws Exception {
		// TODO Auto-generated method stub
cause.printStackTrace();
	}

	public void messageReceived(IoSession session, Object message) throws Exception {
		// TODO Auto-generated method stub
 String strMsg= message.toString();
 if(strMsg.trim().equalsIgnoreCase("quit")){
	 session.close();
	 return;
 }
 Date date = new Date(0);
 session.write(date.toString());
System.out.println("message writen...");
 
	}

	public void messageSent(IoSession arg0, Object arg1) throws Exception {
		// TODO Auto-generated method stub

	}

	public void sessionClosed(IoSession arg0) throws Exception {
		// TODO Auto-generated method stub

	}

	public void sessionCreated(IoSession arg0) throws Exception {
		// TODO Auto-generated method stub

	}

	public void sessionIdle(IoSession session, IdleStatus status) throws Exception {
		  System.out.println("IDLE"+session.getIdleCount(status));  

	}

	public void sessionOpened(IoSession arg0) throws Exception {
		// TODO Auto-generated method stub

	}

}
 

 

0
3
分享到:
评论

相关推荐

    mina权威性能测试例子

    在进行Mina的性能测试时,我们需要关注以下几个关键点: 1. **事件驱动模型**:Mina使用了NIO(非阻塞I/O)和事件驱动的编程模型。这种模型允许服务器在处理多个连接时无需等待每个连接完成,极大地提高了并发性。 ...

    Mina实现RPC的例子

    这个例子中的链接(http://blog.csdn.net/stevexk/archive/2008/07/23/2697907.aspx)提供了更详细的实现细节,包括具体的编码和解码逻辑,以及如何在Mina的过滤器和处理器中处理RPC请求。如果你需要深入学习,建议...

    mina源码+例子mina-2.0.0-M6.zip

    学习MINA,你可以从以下几个方面入手: 1. **了解MINA架构**:熟悉MINA的IoSession、IoFilter、IoHandler等核心组件及其职责。 2. **分析源码**:通过阅读MINA的源码,了解其内部处理流程,如读写事件的处理、过滤...

    Mina长连接短连接实例

    本文将深入探讨Mina框架中的长连接与短连接,并通过提供的Minaclient和MinaHost工程实例进行详细解析。 首先,我们需要了解什么是长连接和短连接。在TCP/IP通信中,短连接是指一次完整的通信过程(如HTTP请求)结束...

    Mina简单小例

    在这个例子中,我们可能会看到如何使用Mina来建立服务器和客户端之间的通信。 在描述中提到的链接是一个博客文章,虽然没有提供具体内容,但我们可以推测它可能详细解释了如何通过Mina创建一个简单的应用。通常,...

    mina test实例一个

    虽然具体的文件列表只给出了 "Mina Test",但通常一个 Mina 示例项目会包含以下几个部分: 1. **配置文件**:可能包含服务器配置、过滤器配置等。 2. **源代码**:包括服务器端的 Acceptor 实现、Handler 实现、...

    Mina Tcp实例

    在TCP实例中,我们将涉及到以下几个关键概念: 1. **Acceptor**:这是Mina中的核心组件,用于监听和接受来自客户端的连接请求。当一个连接建立后,Acceptor会创建一个新的Session来管理该连接。 2. **Session**:...

    mina源码走读与实例

    MINA的源码包结构主要分为以下几个部分: - `core` 包:包含核心组件和接口,如`IoService`、`IoHandler`等。 - 其他相关包,例如用于支持特定功能的扩展包。 ![MINA包结构](pic) ##### 2. 主要接口解析 **...

    Android Mina UDP数据交互

    总结一下,Android Mina UDP数据交互涉及到以下几个关键点: 1. 在Android客户端和Java服务端引入Mina库并配置UDP通信。 2. 实现IoHandler接口处理网络事件。 3. 使用DatagramPacket进行数据封装和解封装。 4. 设计...

    Mina开发之客户端

    在Mina客户端开发中,我们主要涉及以下几个关键组件: 1. **Session**: 代表与服务器的连接,它是Mina的核心概念,用于管理与服务器的通信状态,包括读写操作、会话属性等。 2. **Filter Chain**: 过滤器链是Mina...

    Java mina2源码

    源码分析中,我们通常关注以下几个关键部分: 1. **IoHandler**:这是处理网络事件的主要接口,如连接建立、数据读取、连接关闭等。开发者实现这个接口,就可以定义当这些事件发生时如何处理。 2. **Filter**:...

    Mina2.0 example HttpServer

    在Mina中,HttpServer的实现通常会涉及到以下几个关键部分: 1. **Acceptor**:Acceptor是服务器端的核心组件,负责监听指定的端口,并接收来自客户端的连接请求。在Mina中,Acceptor使用NioSocketSession来管理每...

    Mina 框架研究与实现

    Mina的架构主要由几个关键组件构成,包括IoService、IoHandler、IoFilter,以及它们之间的交互机制。IoService充当了应用程序的入口,负责底层通信接入。IoHandler则聚焦于业务逻辑处理,无需关注实际的通信细节,只...

    Socket及Mina的讲解

    总结来说,Socket和Apache Mina在AndroidPN项目中的应用主要体现在以下几个方面: 1. 提供稳定的网络连接:Socket为基础的连接机制,Mina则通过异步I/O和事件驱动模式优化了连接管理。 2. 数据传输:两者都能支持...

    Apache mina框架入门教程

    Mina 的执行流程主要包括以下几个关键组件: 1. **IoService**:这是网络通信的核心,它在一个线程上管理套接字的创建,拥有自己的Selector来监听连接建立。IoService是服务端和客户端的抽象接口。 2. **...

    mina作为服务器的用法

    这个主题包括以下几个关键知识点: 1. **Mina架构**:Mina的核心是I/O处理器,它处理网络连接的建立、读写数据以及断开连接等操作。用户通过实现特定的事件处理器接口(如`SessionListener`、`MessageDecoder`和`...

    mina客户端例子

    在MINA客户端的实现中,通常包括以下几个关键组件: 1. **SocketSession**:这是MINA的核心概念,代表了与服务器的连接。它处理数据的收发,并维护了连接的状态。 2. **FilterChain**:MINA中的过滤器链模式允许...

    mina框架demo

    描述中提到了几个关键点: 1. **代码结构清晰**:MINA采用了一种模块化的架构,使得应用代码的组织更为有序。它鼓励开发者将业务逻辑和网络通信逻辑分离,这样可以提高代码的可读性和可维护性。 2. **线程管理**:...

    mina apach 网络通信框架高性能例子

    MINA的高性能特性主要体现在以下几个方面: 1. **非阻塞I/O**:MINA基于Java NIO(New IO)库,利用通道(Channel)和选择器(Selector)进行非阻塞I/O操作。这种模式下,当数据不可读写时,线程不会被阻塞,而是...

    Mina基础示例

    通常,一个Mina应用的初始化过程会包括以下几个步骤: 1. **引入依赖**:在项目中添加Mina的依赖库,这通常通过Maven或Gradle的配置来完成。 2. **创建Acceptor**:Acceptor是Mina用于监听客户端连接的组件。你...

Global site tag (gtag.js) - Google Analytics