Apache MINA(Multipurpose Infrastructure for Network Applications) 是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便
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 就可以了
分享到:
相关推荐
2. 客户端代码:演示如何建立一个MINA客户端,连接到服务端,发送数据并接收回应。 3. 相关配置文件:可能包括服务器端和客户端的配置,如日志配置、线程池设置等。 4. 测试脚本或文档:解释如何运行示例,以及预期...
本实例主要关注的是Mina在处理网络通信时遇到的两个常见问题——“断包”和“粘包”。 1. **断包**: 当数据在网络中传输时,可能会因为各种原因(如网络拥塞、数据包大小限制等)被分割成多个部分,这些部分在...
总结一下,这个"Mina开发实例"涵盖了如何使用Apache Mina创建服务端和客户端,通过Maven构建项目,并实现长连接通信。通过学习和实践这个DEMO,开发者可以掌握Mina的基本用法,为构建高性能、高并发的网络应用打下...
Java客户端Socket与Mina服务端通信是网络编程中常见的应用场景,尤其在开发分布式系统或实时数据传输时。这里我们将深入探讨这两个技术,并了解如何通过它们建立保持长连接的通信。 首先,Socket是Java中用于实现...
Apache Mina是一个开源的Java框架,主要用于简化网络应用的开发,...本压缩包中的服务端和客户端代码实例,是学习Mina和Java网络编程的宝贵资源。深入理解并实践这些代码,将有助于提升你在网络编程领域的专业技能。
5. **客户端构建**:客户端示例将演示如何使用IoConnector连接到服务端,同样也可以配置过滤器链和IoHandler来处理与服务端的通信。 6. **会话管理**:Mina中的IoSession对象代表了服务端和客户端之间的连接会话,...
1. 初始化IoAcceptor:Mina服务端首先需要创建一个IoAcceptor实例,用于监听特定端口的连接请求。通常使用NioSocketAcceptor,它基于Java的非阻塞I/O(NIO)模型,可以高效地处理大量并发连接。 2. 创建...
总结起来,这个“MINA TCP简单通信实例”涵盖了使用MINA框架搭建TCP通信的基本步骤,包括服务端Acceptor的配置、客户端Connector的使用、IoHandler的实现以及数据的发送与接收。同时,通过阅读源码,开发者可以...
Session是MINA的核心概念,它代表了服务端与客户端之间的一个连接实例。服务端通过定义Filter Chain(过滤器链)来处理接收到的数据,这些过滤器可以进行数据编码、解码、安全验证等多种任务。 2. **同步客户端**:...
Apache Mina2是一个高度可扩展且高性能的网络通信框架,主要设计用于简化开发网络应用,如TCP/IP和UDP协议的服务端和客户端。它提供了一种事件驱动、非阻塞I/O模型,使得开发者能够更专注于业务逻辑,而不是底层的...
这是一个有关Mina在Java通信...这个实例中有客户端和服务端,与软件TCPUDPDbg进行文字通话测试。用的时候注意添加Mina包,此实例中用到的是mina-core-2.0.4包。 新手可以跟我一样从此实例入手,你会得到意外的收获滴。
描述中提到的源码来源于《NIO框架入门(二):服务端基于MINA2的UDP双向通信Demo演示》这篇文章,这表明源码实例是为了解释和展示如何利用MINA2进行基于UDP的网络编程,特别是涉及到了非阻塞I/O(Non-blocking I/O, ...
Apache的Mina(Multipurpose Infrastructure Networked Applications)是一个... 客户端/服务端框架(典型的C/S架构) 网络套接字(networking socket)类库 事件驱动的异步API(注意:在JDK7中也新增了异步API)
这两个组件通过Java的NIO进行通信,允许客户端与服务器之间高效地交换数据。 **Mina Server** Mina Server是服务端部分,负责监听网络连接、处理客户端的请求并发送响应。它基于事件驱动模型,当有新的连接建立、...
总之,"MinaDemo"是一个展示如何使用Apache MINA框架构建网络应用的实例,涵盖了服务端和客户端的基本操作,以及数据编码解码和事件处理等核心功能。通过深入研究这个示例,开发者可以更好地理解和运用MINA框架,...
在Java-Mina中,我们通常会创建一个`Acceptor`来监听客户端连接,并为每个新连接创建一个`Session`,每个`Session`对应一个独立的通信通道。 要实现服务端主动推送,我们需要以下关键步骤: 1. **配置Mina Server...
《Mina2与Spring整合应用实战》 在Java开发领域,Apache Mina和Spring框架的结合使用能够构建高效、可扩展的网络应用。Mina2作为一个轻量级的网络通信框架,提供了高度抽象的API,使得开发者可以方便地处理网络I/O...
Session代表了客户端与服务端的连接状态,Filter用于处理网络通信中的数据过滤和转换,而ProtocolHandler则负责具体协议的解析和编码。 2. **建立Socket连接** 使用Mina2创建Socket连接,首先需要定义一个服务端的...