//包含四个类,客户端两个+服务器两个
//LoginClient.java,LoginClientHandler.java,LoginServer.java,LoginServerHandler.java
//login客户端代码
package com.mina.day3;
import java.net.InetSocketAddress;
import java.nio.charset.Charset;
import org.apache.log4j.Logger;
import org.apache.mina.core.future.ConnectFuture;
import org.apache.mina.core.service.IoConnector;
import org.apache.mina.core.session.IoSession;
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 LoginClient {
private static Logger logger = Logger.getLogger(LoginClient.class);
private static String HOST = "127.0.0.1";
private static int PORT = 3005;
public static void main(String[] args) {
IoConnector connector = new NioSocketConnector();
connector.setConnectTimeoutMillis(3000);
connector.getFilterChain().addLast("codec",
new ProtocolCodecFilter(
new TextLineCodecFactory(Charset.forName("UTF-8"),
LineDelimiter.WINDOWS.getValue(),
LineDelimiter.WINDOWS.getValue())
));
connector.setHandler(new LoginClientHandler());
IoSession session = null;
try {
ConnectFuture future = connector.connect(new InetSocketAddress(HOST, PORT));
future.awaitUninterruptibly();
session = future.getSession();
session.write("admin,3");
} catch (Exception e) {
logger.error("connecting error...", e);
}
session.getCloseFuture().awaitUninterruptibly();
connector.dispose();
}
}
//客户端处理器代码
package com.mina.day3;
import org.apache.log4j.Logger;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IoSession;
public class LoginClientHandler extends IoHandlerAdapter {
private static Logger logger = Logger.getLogger(LoginClientHandler.class);
@Override
public void messageReceived(IoSession session, Object message)
throws Exception {
// message from server
String msgFServer = message.toString();
logger.info("client received msg = " + msgFServer);
}
}
//服务器端LoginServer.java
package com.mina.day3;
import java.net.InetSocketAddress;
import java.nio.charset.Charset;
import org.apache.log4j.Logger;
import org.apache.mina.core.service.IoAcceptor;
import org.apache.mina.core.session.IdleStatus;
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.NioSocketAcceptor;
public class LoginServer {
private static Logger logger = Logger.getLogger(LoginServer.class);
private static int PORT = 3005;
public static void main(String[] args) {
IoAcceptor acceptor = null;
try {
acceptor = new NioSocketAcceptor();
acceptor.getFilterChain().addLast("codec",
new ProtocolCodecFilter(
new TextLineCodecFactory(Charset.forName("UTF-8"),
LineDelimiter.WINDOWS.getValue(),
LineDelimiter.WINDOWS.getValue())
));
acceptor.getSessionConfig().setReadBufferSize(2048);
acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10);
acceptor.setHandler(new LoginServerHandler());
acceptor.bind(new InetSocketAddress(PORT));
logger.info("server startup ok,port = "+PORT);
} catch (Exception e) {
logger.error("server startup error...", e);
e.printStackTrace();
}
}
}
//服务器处理器代码
package com.mina.day3;
import org.apache.log4j.Logger;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IoSession;
public class LoginServerHandler extends IoHandlerAdapter {
public static Logger logger = Logger.getLogger(LoginServerHandler.class);
@Override
public void messageReceived(IoSession session, Object message)
throws Exception {
String resultMsg = message.toString();
logger.info("server received msg = "+resultMsg);
if ("bye".equals(resultMsg)) {
session.close(true);
}
//简单模拟业务逻辑处理
String[] userInfo = resultMsg.split(",");
String username = userInfo[0];
String password = userInfo[1];
if (username.equals("admin") && password.equals("3")) {
session.write("login success...");
} else {
session.write("login error...");
}
}
@Override
public void messageSent(IoSession session, Object message) throws Exception {
// longlived connection
logger.info("message sent success...");
}
}
分享到:
相关推荐
本入门例子将带你了解如何使用MINA进行基本的网络通信应用开发。 首先,MINA的核心概念包括`Session`、`Filter`和`Handler`。`Session`代表一个网络连接,它是数据传输的通道;`Filter`是处理`Session`中数据的...
4. **实战项目**:“minatest”可能是包含示例代码或一个简单的Mina应用项目,供学习者实践操作,理解Mina在实际项目中的应用。这个项目可能包含了服务器端和客户端的代码,演示了如何建立连接、发送和接收数据。 5...
本入门实例将带你了解如何使用Mina进行基本的网络通信。 首先,我们从环境配置开始。这个实例要求使用Maven作为项目构建工具,因此你需要确保已经安装了Maven,并且在项目中设置了正确的`pom.xml`文件。在`pom.xml`...
通过这个简单的“HelloWorld”例子,我们对Mina有了初步的了解,掌握了如何创建服务器和客户端,并实现了基本的通信功能。在深入学习Mina时,可以进一步研究它的高级特性,如线程模型、缓冲区管理、心跳机制等,这些...
Mina的目标是简化网络编程,使其与处理I/O操作一样简单。 在"Apache Mina 入门Demo"中,我们可以期待学习以下几个核心知识点: 1. **Mina架构**:Apache Mina的核心设计基于事件驱动和非阻塞I/O模型,这种模型特别...
这个例子是关于如何使用Apache Mina实现一个简单的服务端和客户端通信的示例。在这个案例中,`MinaTimeServer`是服务端程序,它负责监听客户端的连接请求,并发送时间信息;而`MinaClient`则是客户端程序,它连接到...
3. **编写简单的应用**:从例子入手,创建一个简单的MINA服务器和客户端,理解它们之间的通信机制。 4. **实现自定义过滤器**:根据需求,编写自定义的过滤器,以实现特定的数据处理功能。 5. **性能调优**:了解...
MINA的目标是为开发者提供一个简单易用但功能强大的库,使得他们能够构建网络应用,如TCP/IP和UDP协议的服务器和客户端,而无需深入理解底层网络编程的复杂性。 MINA的核心设计理念是基于非阻塞I/O(Non-blocking I...
在这个例子中,我们将深入探讨Mina的"时间服务器",它是一个简单的应用,展示了如何使用Mina来创建一个能响应客户端查询当前系统时间的服务器。 **1. Mina基础概念** - **I/O模型**:Mina基于非阻塞I/O(NIO)模型...
接下来,我们来看看如何创建一个简单的Mina服务器。首先,我们需要引入Mina的依赖库。在Maven项目中,可以在pom.xml文件中添加如下依赖: ```xml <groupId>org.apache.mina <artifactId>mina-core <version>...
`IoFilter`是Mina事件处理链的一部分,允许开发者在数据传输前或后添加额外的处理逻辑,例如数据加密、解压缩或验证。过滤器可以串联起来,形成一个过滤器链,数据在到达IoHandler之前会经过这些过滤器。 `IoFilter...
5. **MinaExample项目**:这个项目可能包含了一个或多个示例,演示了如何在Spring环境中配置和启动一个MINA服务器,以及如何创建MINA客户端。可能涉及的文件包括配置文件(如`applicationContext.xml`),MINA的服务...
此外,MINA支持多种传输协议,如TCP/IP、UDP/IP、SSL/TLS等,这使得MINA不仅限于简单的对象传输,还可以应用于各种复杂网络应用场景,如FTP服务器、聊天应用、游戏服务器等。 为了运行这个例子,你需要配置MINA的...
在这个“mina消息推送例子”中,我们将深入探讨Mina如何实现消息推送,并结合Spring框架进行集成。 首先,Apache Mina提供了一个异步事件驱动的网络应用编程接口(API),它简化了TCP/IP和UDP协议的处理,如HTTP、...
这个"mina权威性能测试例子"是针对Apache Mina的一个实际性能测试案例,旨在展示在特定环境下Mina如何处理大量并发连接。在这个测试中,四台客户端机器同时对服务器进行压力测试,结果显示服务器可以轻松地处理一万...
总之,Apache Mina提供了一种灵活且高效的方式来实现RPC,它的事件驱动模型和强大的过滤器框架使得构建网络服务变得更加简单。在实际开发中,可以根据具体需求调整和扩展这些基础架构,以满足不同场景下的性能和功能...
最近做rfid读写,C#和java都用udp不用厂家的动态库,udp自己写也简单,但是试了一下Apache mina ,接收的不是string,二十byte[] 数组,简单实现了UDP,网上也有例子,但是不是我要的。可用。
Apache MINA是一个网络应用程序框架,本实例在android下 进行串口通讯的例子