import java.net.InetSocketAddress;
import org.apache.mina.core.service.IoConnector;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
import org.apache.mina.transport.socket.nio.NioSocketConnector;
/**
* (<b>Entry point</b>) Demonstrates how to write a very simple tunneling proxy
* using MINA. The proxy only logs all data passing through it. This is only
* suitable for text based protocols since received data will be converted into
* strings before being logged.
* <p>
* Start a proxy like this:<br/>
* <code>org.apache.mina.example.proxy.Main 12345 www.google.com 80</code><br/>
* and open <a href="http://localhost:12345">http://localhost:12345</a> in a
* browser window.
* </p>
*
* @author The Apache MINA Project (dev@mina.apache.org)
* @version $Rev$, $Date$
*/
public class Main {
public static void main(String[] args) throws Exception {
if (args.length != 3) {
System.out.println(Main.class.getName()
+ " <proxy-port> <server-hostname> <server-port>");
return;
}
// Create TCP/IP acceptor.
NioSocketAcceptor acceptor = new NioSocketAcceptor();
// Create TCP/IP connector.
IoConnector connector = new NioSocketConnector();
// Set connect timeout.
connector.setConnectTimeoutMillis(30*1000L);
ClientToProxyIoHandler handler = new ClientToProxyIoHandler(connector,
new InetSocketAddress(args[1], Integer.parseInt(args[2])));
// Start proxy.
acceptor.setHandler(handler);
acceptor.bind(new InetSocketAddress(Integer.parseInt(args[0])));
System.out.println("Listening on port " + Integer.parseInt(args[0]));
}
}
/**
* Handles the server to proxy part of the proxied connection.
*
* @author The Apache MINA Project (dev@mina.apache.org)
* @version $Rev$, $Date$
*
*/
public class ServerToProxyIoHandler extends AbstractProxyIoHandler {
}
import java.nio.charset.Charset;
import org.apache.mina.core.buffer.IoBuffer;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IoSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Base class of {@link org.apache.mina.core.service.IoHandler} classes which handle
* proxied connections.
*
* @author The Apache MINA Project (dev@mina.apache.org)
* @version $Rev$, $Date$
*
*/
public abstract class AbstractProxyIoHandler extends IoHandlerAdapter {
private static final Charset CHARSET = Charset.forName("iso8859-1");
public static final String OTHER_IO_SESSION = AbstractProxyIoHandler.class.getName()+".OtherIoSession";
private final Logger logger = LoggerFactory.getLogger(getClass());
@Override
public void sessionCreated(IoSession session) throws Exception {
session.suspendRead();
session.suspendWrite();
}
@Override
public void sessionClosed(IoSession session) throws Exception {
if (session.getAttribute( OTHER_IO_SESSION ) != null) {
IoSession sess = (IoSession) session.getAttribute(OTHER_IO_SESSION);
sess.setAttribute(OTHER_IO_SESSION, null);
sess.close(false);
session.setAttribute(OTHER_IO_SESSION, null);
}
}
@Override
public void messageReceived(IoSession session, Object message)
throws Exception {
IoBuffer rb = (IoBuffer) message;
IoBuffer wb = IoBuffer.allocate(rb.remaining());
rb.mark();
wb.put(rb);
wb.flip();
((IoSession) session.getAttribute(OTHER_IO_SESSION)).write(wb);
rb.reset();
logger.info(rb.getString(CHARSET.newDecoder()));
}
}
import java.net.SocketAddress;
import org.apache.mina.core.RuntimeIoException;
import org.apache.mina.core.future.ConnectFuture;
import org.apache.mina.core.future.IoFutureListener;
import org.apache.mina.core.service.IoConnector;
import org.apache.mina.core.session.IoSession;
/**
* Handles the client to proxy part of the proxied connection.
*
* @author The Apache MINA Project (dev@mina.apache.org)
* @version $Rev$, $Date$
*
*/
public class ClientToProxyIoHandler extends AbstractProxyIoHandler {
private final ServerToProxyIoHandler connectorHandler = new ServerToProxyIoHandler();
private final IoConnector connector;
private final SocketAddress remoteAddress;
public ClientToProxyIoHandler(IoConnector connector,
SocketAddress remoteAddress) {
this.connector = connector;
this.remoteAddress = remoteAddress;
connector.setHandler(connectorHandler);
}
@Override
public void sessionOpened(final IoSession session) throws Exception {
connector.connect(remoteAddress).addListener(new IoFutureListener<ConnectFuture>() {
public void operationComplete(ConnectFuture future) {
try {
future.getSession().setAttribute(OTHER_IO_SESSION, session);
session.setAttribute(OTHER_IO_SESSION, future.getSession());
IoSession session2 = future.getSession();
session2.resumeRead();
session2.resumeWrite();
} catch (RuntimeIoException e) {
// Connect failed
session.close(true);
} finally {
session.resumeRead();
session.resumeWrite();
}
}
});
}
}
分享到:
相关推荐
在这个例子中,我们将深入探讨Mina的"时间服务器",它是一个简单的应用,展示了如何使用Mina来创建一个能响应客户端查询当前系统时间的服务器。 **1. Mina基础概念** - **I/O模型**:Mina基于非阻塞I/O(NIO)模型...
Mina开发之服务器的代码,详情请查看:http://www.cnblogs.com/getherBlog/p/3937196.html Mina开发之客户端的代码,详情请查看:http://www.cnblogs.com/getherBlog/p/3937196.html
在本示例中,我们将深入探讨如何使用Mina进行服务器开发。首先,我们需要了解Mina的核心概念。Mina基于IoSession接口,它代表了服务器与客户端之间的一个连接。通过IoSession,我们可以发送和接收数据,管理连接状态...
Apache Mina是一个开源项目,主要用于构建高...在`MinaTimeServer`和`MinaClient`的例子中,我们可以看到如何使用Mina轻松地建立一个简单的服务器和客户端通信系统,这对于理解和学习Mina的基本用法是非常有帮助的。
在客户端,通常会使用Mina的ClientBootstrap创建连接,并设置相应的处理器来接收服务器推送的消息。客户端也需要保持连接的活跃,定期发送心跳包以避免因网络问题导致的连接断开。 总结来说,这个“mina消息推送...
这个"mina权威性能测试例子"是针对Apache Mina的一个实际性能测试案例,旨在展示在特定环境下Mina如何处理大量并发连接。在这个测试中,四台客户端机器同时对服务器进行压力测试,结果显示服务器可以轻松地处理一万...
在WebSocket+Java服务器中使用Mina框架,首先需要理解以下几个关键概念: 1. **IoSession**:Mina的核心组件,代表一个连接,存储了关于连接的各种信息,如读写缓冲区、事件处理器等。 2. **Filter Chain**:Mina...
通过使用Mina,开发者可以专注于业务逻辑,而无需深入理解底层的TCP/IP协议和网络编程细节。Mina适用于构建多种类型的服务,如FTP、SMTP、HTTP服务器,以及其他需要网络通信的应用程序。其简洁的API和事件驱动的模型...
通过这个"mina使用例子",你可以深入理解如何使用Mina来构建一个网络应用,从创建服务端、配置过滤器链,到处理客户端的连接和数据交换,以及如何进行性能优化和异常处理。这个例子将为你提供实践Mina框架的第一手...
4. **缓冲区(Buffer)**:MINA使用了定制的缓冲区类,可以高效地处理网络数据的读写操作。 5. **过滤器链(Filter Chain)**:MINA允许开发者定义一系列过滤器,数据在通道之间传输时会经过这些过滤器,可以实现...
在本例中,我们将探讨如何使用Apache Mina库来实现RPC服务。Apache Mina是一个开源项目,它提供了一个高度可扩展且高性能的网络通信框架,支持多种协议,如TCP、UDP等。 首先,理解Mina的核心概念是必要的。Mina...
**Mina客户端服务器Demo**是基于Apache Mina框架的一个示例项目,主要展示了如何使用Mina进行网络通信的开发。Apache Mina是一个高度可扩展且轻量级的Java框架,主要用于构建高性能、高效率的网络应用程序,如TCP/IP...
**Android使用Mina与服务器通信Demo** Mina(Minimum Asynchronous Network)是一个高度可扩展的、高性能的网络应用开发框架,常用于构建基于TCP和UDP的网络应用,如服务器和客户端。在Android平台上,Mina可以帮助...
《mina服务器和客户端实现详解》 Apache Mina(Minimum Asynchronous Network)是一个高度可扩展的网络通信框架,它为开发者提供了构建高性能、高可用性的网络应用程序的基础。在本文中,我们将深入探讨如何利用...
为了使学习过程更加直观,配合Mina的官方文档,你可以了解到更多关于如何配置和使用这些组件的细节,包括事件驱动模型、过滤器链以及如何处理异步通信等。Mina的API设计得非常灵活,可以方便地适应各种网络通信需求...
标题“mina作为服务器的用法”表明我们将探讨如何使用Mina框架来搭建和操作服务器。这个主题包括以下几个关键知识点: 1. **Mina架构**:Mina的核心是I/O处理器,它处理网络连接的建立、读写数据以及断开连接等操作...
总的来说,这个"mina通讯例子"是一个基础的MINA使用示例,展示了如何使用MINA库在客户端和服务器之间交换自定义对象。通过学习这个例子,开发者可以了解MINA的基本工作原理,并进一步探索如何利用MINA构建更复杂的...
在本文中,我们将深入探讨Mina的高级使用,特别是在文件图片传送、文件发送、XML和JSON报文处理方面的实践。 1. **Mina的高级使用** Mina的核心在于其异步事件驱动的模型,这使得它在处理大量并发连接时表现出色。...
3. **编写简单的应用**:从例子入手,创建一个简单的MINA服务器和客户端,理解它们之间的通信机制。 4. **实现自定义过滤器**:根据需求,编写自定义的过滤器,以实现特定的数据处理功能。 5. **性能调优**:了解...