使用mina框架传输对象实体方法如下:
对像实体
public class TransDataEntity {
private String md5;
private String path;
private String fromIP;
private byte[] filedata;
public String getMd5() {
return md5;
}
public void setMd5(String md5) {
this.md5 = md5;
}
public String getPath() {
return path;
}
public void setPath(String path) {
this.path = path;
}
public String getFromIP() {
return fromIP;
}
public void setFromIP(String fromIP) {
this.fromIP = fromIP;
}
public byte[] getFiledata() {
return filedata;
}
public void setFiledata(byte[] filedata) {
this.filedata = filedata;
}
}
服务端处理类
import org.apache.mina.core.filterchain.IoFilterAdapter;
import org.apache.mina.core.service.IoHandler;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;
public class ServerHandler extends IoFilterAdapter implements IoHandler {
private static ServerHandler samplMinaServerHandler = null;
public static ServerHandler getInstances() {
if (null == samplMinaServerHandler) {
samplMinaServerHandler = new ServerHandler();
}
return samplMinaServerHandler;
}
private ServerHandler() {
}
// 当连接后打开时触发此方法,一般此方法与 sessionCreated 会被同时触发
public void sessionOpened(IoSession session) throws Exception {
}
public void sessionClosed(IoSession session) {
}
public void messageReceived(IoSession session, Object message) throws Exception {
if (message instanceof TransDataEntity) {
TransDataEntity text = (TransDataEntity) message;
System.out.println("服务器接收到从客户端的getFromIP:" + text.getFromIP());
System.out.println("服务器接收到从客户端的getMd5:" + text.getMd5());
System.out.println("服务器接收到从客户端的getPath:" + text.getPath());
System.out.println("服务器接收到从客户端的文件内容:" + new String(text.getFiledata(), "GBK"));
}
}
public void exceptionCaught(IoSession arg0, Throwable arg1) throws Exception {
}
// 当消息传送到客户端后触发
public void messageSent(IoSession arg0, Object arg1) throws Exception {
}
// 当一个新客户端连接后触发此方法.
public void sessionCreated(IoSession arg0) throws Exception {
}
// 当连接空闲时触发此方法.
public void sessionIdle(IoSession arg0, IdleStatus arg1) throws Exception {
}
}
服务端程序
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.serialization.ObjectSerializationCodecFactory;
import org.apache.mina.transport.socket.SocketAcceptor;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
import com.koubei.syn.utils.ConfigUtils;
public class MainServer {
private static MainServer mainServer = null;
private SocketAcceptor acceptor = new NioSocketAcceptor();
private DefaultIoFilterChainBuilder chain = acceptor.getFilterChain();
private int bindPort = ConfigUtils.PORT;
public static MainServer getInstances() {
if (null == mainServer) {
mainServer = new MainServer();
}
return mainServer;
}
private MainServer() {
chain.addLast("myChin", new ProtocolCodecFilter(new ObjectSerializationCodecFactory()));
acceptor.setHandler(ServerHandler.getInstances());
try {
acceptor.bind(new InetSocketAddress(bindPort));
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws Exception {
MainServer.getInstances();
}
}
客户段处理类
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IoSession;
public class ClientHandler extends IoHandlerAdapter {
private static ClientHandler samplMinaClientHandler = null;
public static ClientHandler getInstances() {
if (null == samplMinaClientHandler) {
samplMinaClientHandler = new ClientHandler();
}
return samplMinaClientHandler;
}
private ClientHandler() {
}
public void sessionOpened(IoSession session) throws Exception {
session.write("客户端与服务器的会话打开了……");
}
public void sessionClosed(IoSession session) {
}
public void messageReceived(IoSession session, Object message) throws Exception {
}
public void messageSent(IoSession session, Object tdEntity) throws Exception {
if (null != tdEntity){
session.write(tdEntity);
}
System.out.println("客户端已经向服务器发送了:");
}
}
客户端
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.serialization.ObjectSerializationCodecFactory;
import org.apache.mina.transport.socket.nio.NioSocketConnector;
import com.koubei.syn.utils.ConfigUtils;
public class MainClient {
private static MainClient mainClient = null;
NioSocketConnector connector = new NioSocketConnector();
DefaultIoFilterChainBuilder chain = connector.getFilterChain();
public static MainClient getInstances() {
if (null == mainClient) {
mainClient = new MainClient();
}
return mainClient;
}
private MainClient() {
}
/**
* @author 展俊
* @description 客户端传数据给服务器端
* @param groupips ip数组 127.0.0.1,127.0.0.2 ...
* @param msg 数据实体
*
*/
public void messgeSent(String[] groupips, Object msg) {
chain.addLast("myChin", new ProtocolCodecFilter(new ObjectSerializationCodecFactory()));
connector.setHandler(ClientHandler.getInstances());
connector.setConnectTimeoutMillis(30);
if ((null != groupips) && (groupips.length > 0)) {
try {
for (String ip : groupips) {
ConnectFuture cf = connector.connect(new InetSocketAddress(ip, ConfigUtils.PORT));
connector.getHandler().messageSent(cf.getSession(), msg);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
分享到:
相关推荐
MINA(Multipurpose ...总之,MINA-2.0.0-M4的英文版API帮助文档是学习和使用MINA框架的重要资源,通过深入研究这个CHM文件,开发者可以更好地掌握MINA的原理和实践,从而开发出高效、稳定的网络应用程序。
在这个“Mina服务端例子”中,我们主要探讨的是如何使用Mina框架来实现一个基于Socket的非阻塞I/O(NIO)服务端。 1. **Mina框架介绍**: Mina提供了事件驱动和异步处理模型,使得开发者可以专注于业务逻辑,而...
连接成功后,`IoSession`对象将被创建,它是Mina中表示客户端和服务端之间连接的实体。`MinaClient`可以使用`IoSession`的`write()`方法发送请求,例如询问服务器当前时间。当服务端响应时,`messageReceived()`方法...
本指南主要介绍了MINA 2.0的基本使用方法,包括NIO的介绍、MINA框架的核心组件以及与传统BIO(Blocking I/O)模式的对比。 NIO(New I/O),顾名思义,是Java提供的一个新I/O标准,它从Java 1.4版本开始引入,主要...
Apache Mina是一个开源框架,主要用于简化网络应用的开发,尤其是基于TCP和UDP协议的应用。它提供了高度可扩展的事件驱动模型,使得开发者可以专注于业务逻辑,而无需关注底层的网络通信细节。本入门实例将带你了解...
Apache MINA(Multipurpose Infrastructure for Network Applications)是一个开源框架,主要设计用于简化网络应用程序的开发,特别是对于基于TCP和UDP的通信。MINA提供了一种高级的、高性能的、异步事件驱动的网络...
**I/O过滤器**是MINA框架中的重要组成部分,它们在数据传输过程中起到转化和处理的作用。过滤器可以将原始的字节流转换为应用程序需要的对象和数据结构,同时可以对输入输出数据进行过滤、压缩、加密等操作。多个...
Hibernate是一个对象关系映射(ORM)框架,它允许Java开发者使用面向对象的方式来操作数据库。Hibernate的jar包如`hibernate-core`包含实体管理、查询语言(HQL)和事务处理等功能。 在Java项目中,如果需要使用SSH...
在实际开发中,我们通常会使用现成的网络通信框架,如Netty、MINA等,它们简化了网络编程的复杂性。Netty是一个高性能、异步事件驱动的网络应用框架,适用于TCP、UDP和HTTP等多种协议。MINA则提供了可扩展的、高性能...
2. **Apache MINA**: 一个网络应用框架,用于简化创建高性能、高可用性的网络服务器和客户端,SSH2实现可能依赖于MINA来处理网络I/O。 3. **Bouncy Castle**: 提供了加密、数字签名和公钥基础设施(PKI)的支持,SSH2...
- 网络传输层:抽象mina和netty为统一接口; - 数据序列化层:可插拔式序列化设置。 #### 4.3 Dubbo通信框架和序列化框架 默认使用Netty作为网络通信框架,Hessian2作为序列化框架,支持多种其他通信和序列化框架,...
- 通过使用Mina作为Socket管理框架,设计并实现了一个能够处理150000路呼叫的系统。系统中,3000个协议栈实体各负责50路呼叫,支持了高并发的网络通信。 - 系统还支持主从机管理模式,实现了横向扩展。主从机管理...
- **协议编码与解码**:SMPP协议使用二进制编码,因此需要将Java对象转化为SMPP命令的字节流,以及将接收到的字节流解析回Java对象。这可以通过自定义的序列化/反序列化逻辑或者使用像Apache Mina或JSMPP这样的库来...
SSH2是一种广泛使用的网络协议,用于安全地远程登录到服务器,执行命令,传输文件等。在GAE上实现SSH2可能涉及到在应用程序中创建一个安全的接口,允许管理员或其他用户通过SSH连接到后端服务,进行管理和维护操作。...
- Transport层:网络传输层,抽象mina和netty。 - Serialize层:数据序列化。 6. Dubbo Monitor实现原理: Monitor是监控服务调用统计信息的组件。当服务调用发生时,相关信息会被记录下来,包括调用次数、调用...
Openfire利用MINA框架来处理客户端与服务器之间的连接管理。具体来说,Openfire中的`ConnectionHandler`类继承自MINA的`IoHandlerAdapter`类,负责客户端连接的创建与销毁,以及XML数据包的传递。此外,Openfire还...
- Netty或MINA:作为底层通信框架,负责传输层的支持。 - 其他第三方库:如JSON解析库Fastjson,日志库Log4j等。 5. **配置文件**:主要的配置文件有`dubbo.properties`或`dubbo.xml`,它们定义了服务的元数据,...
- **Mina**:用于快速开发高性能和高可靠性的网络服务器和客户端的应用程序框架。 **5. DWR 中如何获取 HTTP 请求的 session** - **DWR (Direct Web Remoting)**:提供一种简单的方式让JavaScript可以直接调用Java...
- 网络传输层抽象了不同的网络通信框架(如Mina、Netty等),提供了统一的接口。这一层以`Message`为中心,并提供了`Channel`、`Transporter`、`Client`、`Server`和`Codec`等扩展接口。 10. **数据序列化层...
9. 网络传输层(Transport):提供统一的网络传输接口,抽象mina和netty为统一的API,核心接口包括Channel、Transporter、Client、Server和Codec等。 10. 数据序列化层(Serialize):提供数据序列化和反序列化的...