客户端:
public class ByteClient
{
public static void main(String[] args) throws InterruptedException {
byte [] message="aaaaaaaaaaaaa".getBytes();
try {
MinaClient.sendMessage("127.0.0.1:8800", message);
} catch (Exception e) {
e.printStackTrace();
}
}
}
MinaClient:
import java.net.InetSocketAddress;
import java.nio.charset.Charset;
import org.apache.mina.core.buffer.IoBuffer;
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.filter.logging.LoggingFilter;
import org.apache.mina.transport.socket.nio.NioSocketConnector;
public class MinaClient {
static ConnectFuture cf=null;
/**
* 创建连接
* @param address
* @param port
*/
static void getconnect(String address,int port){
NioSocketConnector connector = new NioSocketConnector();
connector.getFilterChain().addLast("logger", new LoggingFilter());
connector.getFilterChain().addLast(
"codec",new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8")))); // 设置编码过滤器
connector.setConnectTimeout(300);
connector.setHandler(new ClientHandler());// 设置事件处理器
cf = connector.connect(new InetSocketAddress(address,port));// 建立连接
}
/**
* 发送报文
* @param serviceAddress
* @param message
* @throws Exception
*/
public static void sendMessage(String serviceAddress,byte[] message) throws Exception{
String[] address = serviceAddress.split(":");
int port =0;
try {
port = Integer.valueOf(address[1]);
} catch (NumberFormatException e) {
e.printStackTrace();
throw new Exception("服务器地址错误!");
}
if(cf==null){
getconnect(address[0],port);
}
cf.awaitUninterruptibly();// 等待连接创建完成
cf.getSession().write(IoBuffer.wrap(message));// 发送消息 这里是发送字节数组的重点
cf.getSession().getCloseFuture().awaitUninterruptibly();// 等待连接断开
}
/**
* 发送报文String
* @param serviceAddress
* @param message
* @throws Exception
*/
public static void sendMessage(String serviceAddress,String message) throws Exception{
String[] address = serviceAddress.split(":");
int port =0;
try {
port = Integer.valueOf(address[1]);
} catch (NumberFormatException e) {
e.printStackTrace();
throw new Exception("服务器地址错误!");
}
if(cf==null){
getconnect(address[0],port);
}
cf.awaitUninterruptibly();// 等待连接创建完成
cf.getSession().write(message);// 发送消息
cf.getSession().getCloseFuture().awaitUninterruptibly();// 等待连接断开
}
/**
* 回复报文
* @param serviceAddress
* @param message
* @throws Exception
*/
public static void returnMessage(String serviceAddress,String message) throws Exception{
String[] address = serviceAddress.split(":");
int port =0;
try {
port = Integer.valueOf(address[1]);
} catch (NumberFormatException e) {
e.printStackTrace();
throw new Exception("服务器地址错误!");
}
if(cf==null){
getconnect(address[0],port);
}
cf.awaitUninterruptibly();// 等待连接创建完成
cf.getSession().write(message);// 发送消息
cf.getSession().getCloseFuture().awaitUninterruptibly();// 等待连接断开
}
}
服务端:
/**
* 创建byte处理服务器
* @param port端口号 time超时时间
* @throws IOException
*/
public static void startByteService(int port,int time) throws IOException{
// 创建服务器监听
IoAcceptor acceptor = new NioSocketAcceptor();
// 增加日志过滤器
acceptor.getFilterChain().addLast("logger", new LoggingFilter());
//这里不添加字符编码过滤器
// 指定业务逻辑处理器
acceptor.setHandler(new byteServerHandler());
// 设置buffer的长度
acceptor.getSessionConfig().setReadBufferSize(2048);
// 设置连接超时时间
acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, time);
// 绑定端口
acceptor.bind(new InetSocketAddress(port));
System.out.println("服务器在端口:"+port+"已经启动");
}
byteServerHandler:
import org.apache.mina.core.buffer.IoBuffer;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IoSession;
/**
* 自定义的消息处理器,必须实现IoHandlerAdapter类
* @author 何明
*
*/
public class byteServerHandler extends IoHandlerAdapter{
private int count = 0;
/**
* 当一个客户端连接进入时
*/
@Override
public void sessionOpened(IoSession session) throws Exception {
System.out.println("incoming client: " + session.getRemoteAddress());
}
/**
* 当一个客户端关闭时
*/
@Override
public void sessionClosed(IoSession session) throws Exception {
System.out.println(session.getRemoteAddress() + "is Disconnection");
}
@Override
public void messageReceived(IoSession session, Object message)
throws Exception {
IoBuffer ioBuffer = (IoBuffer)message;
byte[] b = new byte[ioBuffer.limit()];
ioBuffer.get(b);
String msg=new String(b);
System.out.println("收到客户端发来的消息为" + " " + msg);
//将测试消息会送给客户端
//session.write(str + count);
}
}
运行结果:
服务器在端口:8800已经启动
incoming client: /127.0.0.1:1353
收到客户端发来的消息长度为 13
收到客户端发来的消息为 aaaaaaaaaaaaa
相关推荐
最近做rfid读写,C#和java都用udp不用厂家的动态库,udp自己写也简单,但是试了一下Apache mina ,接收的不是string,二十byte[] 数组,简单实现了UDP,网上也有例子,但是不是我要的。可用。
Apache Mina Server 2.0中文参考手册V1.0,Apache Mina2.0学习笔记(修订版)Apache Mina Server 2.0中文参考手册V1.0,Apache Mina2.0学习笔记(修订版)
在创建自定义协议的DEMO中,开发者可能首先会定义一个ProtocolEncoder接口的实现,用来将应用层对象转换成ByteBuf(MINA中的字节数组表示)。接着,会实现ProtocolDecoder接口,负责将接收到的ByteBuf反序列化为应用...
Apache Mina是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。这个"apache-mina-2.0.4.rar"压缩包包含的是Apache Mina 2.0.4版本的源代码,是深入理解和定制Mina的...
在本文中,我们将深入探讨Mina的高级使用,特别是在文件图片传送、文件发送、XML和JSON报文处理方面的实践。 1. **Mina的高级使用** Mina的核心在于其异步事件驱动的模型,这使得它在处理大量并发连接时表现出色。...
3. **Protocol Codec**:Apache Mina提供了多种编码器和解码器,如ByteToMessageDecoder和MessageToByteEncoder,用于处理不同协议的数据格式转换。 4. **NIO(Non-blocking I/O)**:Mina利用Java的NIO库,实现高效...
"Apache Mina chm pdf教程和帮助文档"提供了详尽的API参考和实例,涵盖了从基本概念到高级特性的各个方面,有助于开发者快速掌握Mina的使用方法。 **7. 社区支持** Apache Mina作为一个活跃的开源项目,拥有强大的...
这些实例通常涵盖了基本的连接建立、数据发送和接收、异常处理等方面。 总的来说,Apache MINA是一个强大的网络通信框架,其非阻塞I/O和过滤器链设计大大简化了Java网络应用的开发。通过学习和实践MINA的实例,...
深入理解Apache_Mina_(4)----_IoFilter和IoHandler的区别和联系 深入理解Apache_Mina_(5)----_配置Mina的线程模型 深入理解Apache_Mina_(6)----_Java_Nio_ByteBuffer与Mina_ByteBuffer的区别(类图) 相信你们也愿意去...
客户端架构主要涉及连接服务器、发送请求和接收响应的过程。与服务器端类似,客户端也需要使用 I/O Service、Filter Chain 和 I/O Handler。客户端的关键活动包括: - **发起连接**:使用 `IoConnector` 发起连接...
Apache MINA FtpServer的核心组件包括服务器引擎、服务器端口、用户会话管理和认证机制。服务器引擎负责监听客户端连接,服务器端口定义了监听的网络地址和端口。用户会话管理负责处理每个客户端的连接,创建独立的...
4. **事件处理:** 实现`IoHandler`接口,处理连接建立、数据发送和关闭等事件。 5. **数据发送:** 调用`write()`方法,将数据写入连接,Mina2会负责实际的数据传输。 在实际应用中,通常还需要进行异常处理、连接...
通过深入学习和实践这个Apache Mina入门Demo,你将掌握如何利用Mina构建网络应用,并了解其核心特性和工作原理,这对于从事Java网络编程或者需要处理大规模并发连接的开发者来说是非常有价值的。
2. **ProtocolDecoder** 和 **ProtocolEncoder**: 这两个接口用于解码接收到的数据和编码要发送的数据。MINA提供了一种灵活的方式,可以根据实际需求定义自定义的编解码器。 3. **FilterChain**: 过滤器链是MINA中...
标题中的“Apache MINA框架相关资料”涵盖了对MINA框架的全面学习材料,包括中文参考手册、源码分析、API文档和与Spring框架的整合指南。 1. **中文参考手册**(Apache_Mina_Server_2.0中文参考手册V1.0.pdf):这...
Apache MINA是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架。 当前发行的 MINA 版本支持基于 Java NIO 技术的 TCP/UDP 应用程序开发、串口通讯程序(只在最新的预览版...
在这个"apache mina-spring 服务端程序"项目中,Mina和Spring被整合在一起,创建了一个高效的服务端程序。这样的整合允许开发者利用Spring的强大功能来管理服务端的生命周期,配置网络连接,以及处理业务逻辑。...
Apache Mina Server 2.0 是一款高性能、可扩展的网络通信框架,广泛应用于开发网络应用服务器,如TCP/IP和UDP服务。这个框架允许开发者用Java编写高效的网络应用程序,简化了网络编程的复杂性。Mina 2.0 版本在前一...