1.首先请看服务端代码:
package org.apache.mina.example.reverser;
import java.net.InetSocketAddress;
import java.nio.charset.Charset;
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;
/**
* (<b>Entry point</b>) Reverser server which reverses all text lines from
* clients.
*
* @author <a href="http://mina.apache.org">Apache MINA Project</a>
*/
public class Main {
private static final int PORT = 8080;
public static void main(String[] args) throws Exception {
NioSocketAcceptor acceptor = new NioSocketAcceptor();
// Prepare the configuration
acceptor.getFilterChain().addLast("logger", new LoggingFilter());
acceptor.getFilterChain().addLast(
"codec",
new ProtocolCodecFilter(new TextLineCodecFactory(Charset
.forName("UTF-8"))));
// Bind
acceptor.setHandler(new ReverseProtocolHandler());
acceptor.bind(new InetSocketAddress(PORT));
System.out.println("Listening on port " + PORT);
}
}
2.在看服务器端消息处理器
package org.apache.mina.example.reverser;
import org.apache.mina.core.service.IoHandler;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IoSession;
/**
* {@link IoHandler} implementation of reverser server protocol.
*
* @author <a href="http://mina.apache.org">Apache MINA Project</a>
*/
public class ReverseProtocolHandler extends IoHandlerAdapter {
@Override
public void exceptionCaught(IoSession session, Throwable cause) {
// Close connection when unexpected exception is caught.
session.close(true);
}
@Override
public void messageReceived(IoSession session, Object message) {
// Reverse reveiced string
String str = message.toString();
System.err.println("收到客户端发来的消息::"+str);
StringBuilder buf = new StringBuilder(str.length());
for (int i = str.length() - 1; i >= 0; i--) {
buf.append(str.charAt(i));
}
// and write it back.
session.write(buf.toString());
}
}
3.接着是自己模仿写的客户端代码:
package org.apache.mina.example.reverser;
import java.net.InetSocketAddress;
import org.apache.mina.core.RuntimeIoException;
import org.apache.mina.core.future.ConnectFuture;
import org.apache.mina.core.session.IoSession;
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.NioSocketConnector;
public class MyClient
{
private static final String HOSTNAME = "localhost";
private static final int PORT = 8080;
private static final long CONNECT_TIMEOUT = 30*1000L; // 30 seconds
public static void main(String[] args) throws Exception
{
// 创建 TCP/IP connector.
NioSocketConnector connector = new NioSocketConnector();
//设置日志过滤器
connector.getFilterChain().addLast("logger", new LoggingFilter());
//获得过滤器,设置读取数据的方式一行一行的读.
connector.getFilterChain().addLast("codec",new ProtocolCodecFilter(new TextLineCodecFactory()));
connector.setHandler(new ReverseClientHandler());
//set connect timeout
connector.setConnectTimeoutMillis(CONNECT_TIMEOUT);
IoSession session;
for (;;) {
try {
//连接到服务器
ConnectFuture future = connector.connect(new InetSocketAddress(
HOSTNAME, PORT));
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();
}
}
4.客户端的消息处理器
package org.apache.mina.example.reverser;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IoSession;
public class ReverseClientHandler extends IoHandlerAdapter
{
@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 msg = (String)message;
System.out.println("Server sent message :"+msg);
session.write(msg);
}
@Override
public void sessionClosed(IoSession session) throws Exception
{
session.close(true);
}
@Override
public void sessionCreated(IoSession session) throws Exception
{
// TODO Auto-generated method stub
super.sessionCreated(session);
}
@Override
public void sessionOpened(IoSession session) throws Exception
{
session.write("我是好人");
}
}
然后:先启动服务器端Main,然后启动MyClient,跑起来吧。
分享到:
相关推荐
mina-core-2.0.0-M1.jar/mina-example-1.0.5.jar/slf4j-jdk14-1.6.1.jar/slf4j-log4j12-1.6.1.jar mina 所用jar
mina-example-2.0.0-M6.jar mina-filter-codec-netty-2.0.0-M6.jar mina-filter-compression-2.0.0-M6.jar mina-integration-beans-2.0.0-M6.jar mina-integration-jmx-2.0.0-M6.jar mina-integration-ognl-2.0.0-M6...
MINA开发核心jar包,mina-example-2.0.4.jar 发出来供大家使用!
在这个场景中,我们关注的是MINA的核心组件以及两个特定的过滤器和传输组件:`mina-core-2.0.0-RC1.jar`、`mina-filter-compression-2.0.0-RC1.jar`和`mina-transport-apr-2.0.0-RC1.jar`。 **MINA Core (mina-core...
mina-filter-compression-2.0.7.jar,mina 过滤器jar包,核心包之一
apache-mina-2.0.7-bin.zip,apache-mina-2.0.7-src.zip,log4j-1.2.17.zip,slf4j-api-1.6.6.jar,slf4j-api-1.6.6-sources.jar,slf4j-log4j12-1.6.6.jar,mina-example-2.0.7.jar,mina-example-2.0.7-sources....
标题中的"apache-mina-2.0.16-jar包-代码.zip"表明这是一个包含Apache Mina 2.0.16版本源代码的JAR文件压缩包。这个压缩包通常用于开发者进行源码级别的学习、调试或定制工作。通过解压这个文件,你可以获得Mina库的...
描述中的"apache-mina-2.0.16.zip"是指这个版本的源代码或二进制库被打包成ZIP文件供用户下载。ZIP文件是常见的压缩格式,用于减少文件的存储空间和便于传输。 标签"2.0.16"强调了这个特定的版本号。在软件开发中,...
mina-example-2.0.7.jar包含了MINA提供的示例代码,这些例子覆盖了各种常见的网络应用场景,包括HTTP服务器、聊天应用等,可以帮助开发者快速理解和学习如何使用MINA进行网络编程。 mina-statemachine-2.0.7.jar...
在本文中,我们将深入探讨mina-core-2.0.0-RC1这个版本的主要特点和关键功能。 mina-core-2.0.0-RC1是MINA框架的一个重要里程碑,代表了其发展的一个关键阶段。此版本的发布标志着MINA向2.0正式版迈进了一大步,...
在实际应用中,将mina-core-2.0.0-M1.jar与SLF4J结合,可以实现高效且可维护的网络通信服务,并通过SLF4J进行细致的日志记录,便于问题排查和系统监控。在开发过程中,需要确保mina-core库与合适的SLF4J绑定库(如...
mina-integration-beans-2.0.0-M4.jar mina-integration-beans-2.0.0-M4.jar
在本案例中,我们关注的是 "mina-core-2.0.1.jar",这是 Apache MINA 的核心库,包含了框架的基本组件和功能。 **MINA 核心组件:** 1. **IoSession**:MINA 中的核心概念,它代表了服务端与客户端之间的一个连接。...
mina-integration-ognl-2.0.0-M4.jar mina-integration-ognl-2.0.0-M4.jar
Apache MINA是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利...当前发行的 MINA 版本支持基于 Java NIO 技术的 TCP/UDP 应用程序开发、串口通讯程序(只在最新的预览版中提供)。
在MINA-2.0.0-M4版本中,可能会涉及以下重要知识点: 1. 新增的API和类:了解新增的类和接口,如何在项目中利用它们来提升效率或扩展功能。 2. 性能优化:学习这一版本中的性能改进,如何在代码中应用以提高应用的...
mina-core-2.0及其他相关jar,mina-core-2.0及其他相关jarmina-core-2.0及其他相关jarmina-core-2.0及其他相关jarmina-core-2.0及其他相关jar
《mina-http-2.0.7.jar:Java中的MINA框架与HTTP支持详解》 MINA(Multipurpose Infrastructure for Network Applications)是一个强大的网络应用程序框架,它由Apache软件基金会开发,主要用于构建高性能、高效率...
标题中的"apache-mina-2.0.7-bin.tar"指的是Apache Mina 2.0.7版本的二进制发布包,该包包含了编译好的库文件和运行时所需的资源,用户可以直接使用而无需自行编译源代码。 描述中提及的"apache-mina-2.0.7-src.tar...
mina-transport-apr-2.0.2.jar