jar包依赖:
<dependency>
<groupId>org.apache.mina</groupId>
<artifactId>mina-core</artifactId>
<version>2.0.7</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.6</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.6</version>
</dependency>
另外还需要一个log4j.properties配置文件
server类:
IoAcceptor accepter = new NioSocketAcceptor();
ProtocolCodecFilter coderFilter = new ProtocolCodecFilter(
new TextLineCodecFactory(Charset. forName("UTF-8")));
/*
* 添加filter
* filter在DefaultIoFilterChainBuilder中是以list存储的
* private final List<Entry> entries;这里的Entry是DefaultFilterChain里
* 自定义的Entry: private class EntryImpl implements Entry{...}
* 可以调用addFirst,addLast,addAfter,addBefore方法进行添加filter,不同的方法
* 添加filter位置不同,执行的顺序不同,FilterChain按方法计算index将filter有序存储
* 所有添加的filter 要保证名字唯一
*/
accepter.getFilterChain().addLast("a", new LoggingFilter());
accepter.getFilterChain().addLast("b",coderFilter);
/*
* 设置消息处理类,必须,否则抛异常
* 继承IoHandlerAdapter类即可,重写messageReceived方法
* 对client消息进行处理
*/
accepter.setHandler(new MyServerHandler());
//设置session参数
accepter.getSessionConfig().setReadBufferSize(1024);
accepter.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10);
/*
* 绑定到某个socket端口,具体绑定是开启一个nio socket channel
* 启动调用顺序
* accepter的bind方法调用bindInternal方法,
* bindInternal调用startupAcceptor方法
* startupAcceptor方法中会启动一个线程对chanel进行select监听,
* org.apache.mina.core.polling.AbstractPollingIoAcceptor.Acceptor 线程监听类
*
* org.apache.mina.transport.socket.nio.NioSocketAcceptor
* .open(SocketAddress localAddress)方法源码
*
*protected ServerSocketChannel open(SocketAddress localAddress) throws Exception {
ServerSocketChannel channel = ServerSocketChannel.open();
boolean success = false;
try {
channel.configureBlocking(false);
ServerSocket socket = channel.socket();
socket.setReuseAddress(isReuseAddress());
socket.bind(localAddress, getBacklog());
channel.register(selector, SelectionKey.OP_ACCEPT);
success = true;
} finally {
if (!success) {
close(channel);
}
}
*/
accepter.bind(new InetSocketAddress(8484));
/*
* 启动后可telnet本机该端口进行测试
* >telnet 127.0.0.1 8484
* 连接后随便输入东西进行测试,信心怎么处理就看上面自定义的handler
*/
自定义handler重新messageReceived方法:
@Override
public void messageReceived( IoSession session, Object message ) throws Exception
{
String str = message.toString();
System.out.println(str);
if( str.trim().equalsIgnoreCase("quit") ) {
session.close(true);
return;
}
Date date = new Date();
session.write( date.toString() );
}
分享到:
相关推荐
3. **创建Server端**:利用Mina创建一个服务器端,监听指定的端口,并绑定我们的服务实现。Mina中的Acceptor负责接受连接请求。 ```java ServerBootstrap bootstrap = new ServerBootstrap(); bootstrap.group...
- **Server端**:在时间服务器中,Mina会创建一个Acceptor,监听特定的端口,等待客户端连接。当客户端连接建立后,Acceptor会创建一个Session对象,用于管理与该客户端的通信。然后,一个自定义的过滤器(例如,...
<bean id="minaServer" class="org.apache.mina.core.service.SimpleIoAcceptor"> <bean class="org.apache.mina.core.session.IdleStatus"> <!-- 设置心跳检查的空闲状态 --> ...
一个简单的TCPServer示例代码会涉及到IoService的编写。在编写IoService时,可以使用IoAcceptor接口的实现类NioSocketAcceptor,它实际上底层是通过java.nio.channels.ServerSocketChannel类创建的。如果想要更高的...
src源码包下的test.mina.server.StartServer.java是启动服务器 test源码包下的socket.client.StartClient.java是启动客户端 日志记录在log目录下 lib下有完整的引用jar包 下载后记得评论和评分啊,可以返回资源分,...
接下来,我们来看看如何创建一个简单的Mina服务器。首先,我们需要引入Mina的依赖库。在Maven项目中,可以在pom.xml文件中添加如下依赖: ```xml <groupId>org.apache.mina <artifactId>mina-core <version>...
这个例子中,我们创建了一个可直接运行的Spring Boot项目,通过配置文件指定串口参数,然后利用Mina进行串口通信。注意,实际应用中需要根据具体需求调整配置和处理逻辑。希望这个例子能帮助你节省时间,避免在整合...
接下来是创建一个简单的服务器端示例——`Demo1Server`。该类中包含了创建服务器的基本步骤,具体实现如下: ```java package test.service; import java.net.InetSocketAddress; import java.nio.charset.Charset...
在Mina 2.0版本中,框架分为Server端和Client端,两者都在通信结构中扮演着类似的角色,将网络通信与业务逻辑分离,使得开发者可以专注于数据处理和业务实现。Mina 的执行流程主要包括以下几个关键组件: 1. **...
public class MinaServer { public static void main(String[] args) throws Exception { EventLoopGroup bossGroup = new NioEventLoopGroup(); EventLoopGroup workerGroup = new NioEventLoopGroup(); try { ...
Mina框架中包括了对服务端(Server)和客户端(Client)的封装,使得构建网络通信应用变得简单易行。 Mina框架的核心组件和流程包括以下几个部分: 1. IoService:这是负责建立套接字连接的接口,在单一线程上运行...
这个例子将详细介绍如何在Android环境中实现MiNa进行文本传输。 ### 1. MiNa核心概念 MiNa基于Java的NIO(Non-blocking I/O)模型,提供了事件驱动、非阻塞I/O的网络通信库。主要包含以下几个核心组件: - **...
Apache Mina是一个面向网络应用程序的高级、可伸缩、简单、快速的异步I/O框架。为了与HPsocket进行对接,需要在Mina中设置相应的过滤器和处理器。 1. **创建IoConnector**:首先,创建一个`NioSocketConnector`实例...
总结起来,通过`MinaServer`这个简单的例子,我们可以了解到Mina框架的基本使用方法,包括创建服务器、配置处理器、管理会话和数据流。随着对Mina的深入学习,你将能够构建更复杂的网络应用程序,如FTP服务器、聊天...
public class Minaserver { public static void main(String[] args) throws Exception { IoAcceptor acceptor = new NioSocketAcceptor(); acceptor.getFilterChain().addLast("logger", new LoggingFilter());...
android 上的ftp服务器例子,通过ApacheFtpServer实现,依赖以下jar包: commons-...,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
Apache Mina的核心理念是提供一种抽象层,将复杂的网络编程模型转化为简单的事件驱动模型,开发者可以通过编写处理器来处理网络事件,如数据接收和发送。Mina提供了异步I/O模型,可以有效地处理大量并发连接,提高...