您当前的位置:首页 > 智能家居 > 使用Mina实现一个helloword程序 网站首页 智能家居
使用Mina实现一个helloword程序
发布时间:2017-06-27 23:05:34编辑:阅读()
-
什么是MINA?
ApacheMINA是一个网络应用程序框架,用来帮助用户简单地开发高性能和高可扩展性的网络应用程序。它提供了一个通过Java NIO在不同的传输例如TCP/IP和UDP/IP上抽象的事件驱动的异步API。
想做一个设备管理系统,打算用MINA作为框架,所以先学习一下MINA的基础用法Hello Word。首先需要有java、eclipse、maven等基础知识。
1、新建MAVEN工程
在eclipse中,新建一个maven类型的工程,这个是基本的基础,不在细说
2、添加jar依赖
找到pom.xml,在pom中添加mina和slfj的依赖
<dependency>
<groupId>org.apache.mina</groupId>
<artifactId>mina-core</artifactId>
<version>2.0.16</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-nop</artifactId>
<version>1.7.25</version>
</dependency>3、编写代码
使用mina编写一个查询时间的tcp服务器。网络通信的基本功能mina已经做好了,包括连接管理、数据收发等,只需要自己写一个业务处理类。
在eclipse中添加一个TimeServerHandler类,用来处理时间查询的业务逻辑
package com.zhb1190.SmartHomeServer.Server;
import java.util.Date;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IoSession;
public class TimeServerHandler extends IoHandlerAdapter{
@Override
public void exceptionCaught(IoSession session, Throwable cause)
throws Exception {
cause.printStackTrace();
}
/*
* 这个方法是目前这个类里最主要的,
* 当接收到消息,只要不是quit,就把服务器当前的时间返回给客户端
* 如果是quit,则关闭客户端连接*/
@Override
public void messageReceived(IoSession session, Object message)
throws Exception {
String str = message.toString();
if (str.trim().equalsIgnoreCase("quit")) {
session.close();
return;
}
Date date = new Date();
System.out.println("hello"+str+session.getRemoteAddress()+date.toString());
session.write("hello("+str+")["+session.getRemoteAddress()+"] "+date.toString()+"\r\n");
System.out.println("Message written...");
}
@Override
public void sessionClosed(IoSession session) throws Exception {
/* TODO Auto-generated method stub */
super.sessionClosed(session);
System.out.println("客户端与服务端断开连接.....");
}
}然后编写mina启动的主函数
package com.zhb1190.SmartHomeServer;
import java.net.InetSocketAddress;
import java.nio.charset.Charset;
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.TextLineCodecFactory;
import org.apache.mina.filter.logging.LoggingFilter;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
import com.zhb1190.SmartHomeServer.Server.TimeServerHandler;
/**
* Hello world!
*
*/
public class App
{
/* 服务器监听端口 */
private static final int PORT = 7788;
public static void main( String[] args )
{
System.out.println( "Hello World!" );
/* 服务器端的主要对象 */
IoAcceptor acceptor = new NioSocketAcceptor();
/* 设置Filter链 */
acceptor.getFilterChain().addLast("logger", new LoggingFilter());
/* 协议解析,采用mina现成的UTF-8字符串处理方式 */
acceptor.getFilterChain().addLast("codec", new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8"))));
/* 设置消息处理类(创建、关闭Session,可读可写等等,继承自接口IoHandler) */
acceptor.setHandler(new TimeServerHandler() );
/* 设置接收缓存区大小 */
acceptor.getSessionConfig().setReadBufferSize(2048);
/* 读写通道无任何操作就进入空闲状态 */
acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10);
try {
/* 服务器开始监听 */
acceptor.bind( new InetSocketAddress("localhost",PORT) );
}catch(Exception e){
e.printStackTrace();
}
}
}4、编译测试
在eclipse中选择工程执行Run As --> Maven Install
编译完成后运行App类中的main函数。
打开TCP调试助手,连接服务器的7788端口,然后向服务器发送test命令,注意:命令后边要跟换行符,否则mina会认为消息没有发送完毕一直不处理。
关键字词:MINA,MINA使用方法,树莓派上使用MINA
相关文章
-
无相关信息