Mina是什么?Apache的定义如下:
Apache MINA is a network application framework which helps users develop high performance and high scalability network applications easily. It provides an abstract · event-driven · asynchronous API over various transports such as TCP/IP and UDP/IP via Java NIO.
Mina是一个网络应用架构,它能帮助我们很轻松的开发出功能强大、可控性强的网络应用。它在 TCP/IP及UDP/IP的基础上通过 Java NIO提供了一个抽象的事件驱动的异步传输消息的编程接口。目前最新版本是:Apache MINA 2.0.0-M5 release。
根据Mina的样例,我将演示一个HelloWorldServer和HelloWordClient的创建
准备工作
您需要准备如下包:
下载地址如下:
mina-2.0.0-M5.zip:http://mina.apache.org/index.html
slf4j-1.5.6.zip:www.slf4j.org
准备好之后,编写HelloWorldServerHandler
package com.ysh.mina.sampleserver;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IoSession;
public class HelloWorldServerHandler extends IoHandlerAdapter {
//当一个客端端连结进入时
@Override
public void sessionOpened(IoSession session) throws Exception {
System.out.println("incomming client : "+session.getRemoteAddress());
}
//当一个客户端关闭时
@Override
public void sessionClosed(IoSession session) {
System.out.println("one Clinet Disconnect !");
}
//当客户端发送的消息到达时:
@Override
public void messageReceived(IoSession session, Object message) throws Exception
{
//我们己设定了服务器解析消息的规则是一行一行读取,这里就可转为String:
String s=(String)message;
// Write the received data back to remote peer
System.out.println("收到客户机发来的消息: "+s);
session.write("Hello Word: "+"Greeting From Server");
}
}
编写HelloWorld服务器端启动程序HelloWorldServer
package com.ysh.mina.sampleserver;
import java.net.InetSocketAddress;
import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.transport.socket.SocketAcceptor;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
public class HelloWorldServer {
public static void main(String[] args) {
try{
//创建一个非阻塞的Server端Socket,用NIO
SocketAcceptor acceptor = new NioSocketAcceptor();
//创建接收数据的过滤器
DefaultIoFilterChainBuilder chain = acceptor.getFilterChain();
//设定这个过滤器将一行一行(/r/n)的读取数据
chain.addLast("myChin", new ProtocolCodecFilter(new TextLineCodecFactory()));
//设定服务器端的消息处理器:一个SamplMinaServerHandler对象,
acceptor.setHandler(new HelloWorldServerHandler());
// 服务器端绑定的端口
int bindPort=9988;
//绑定端口,启动服务器
acceptor.bind(new InetSocketAddress(bindPort));
System.out.println("Mina Server is Listing on:= " + bindPort);
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
接着编写HelloWorldClientHandler
package com.ysh.mina.sampleclient;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IoSession;
public class HelloWorldClientHandler extends IoHandlerAdapter{
//当一个客端端连结进入时
@Override
public void sessionOpened(IoSession session) throws Exception {
session.write("Hello World: server :"+ "Client: "+session.getRemoteAddress()+" is coming!");
}
//当一个客户端关闭时
@Override
public void sessionClosed(IoSession session) {
System.out.println("Clinet"+session.getRemoteAddress()+" is disconnected!");
}
//当服务器端发送的消息到达时:
@Override
public void messageReceived(IoSession session, Object message)throws Exception {
//我们己设定了服务器解析消息的规则是一行一行读取,这里就可转为String:
String s=(String)message;
System.out.println("收到服务器发来的消息: "+s);
}
}
编写我们的客户端程序和服务器端很相似HelloWorldClient
package com.ysh.mina.sampleclient;
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.textline.TextLineCodecFactory;
import org.apache.mina.transport.socket.nio.NioSocketConnector;
public class HelloWorldClient {
public static void main(String[] args) throws Exception {
//实际应用中,这里可以生成一个线程来监听
// Create TCP/IP connector.
NioSocketConnector connector = new NioSocketConnector();
// 创建接收数据的过滤器
DefaultIoFilterChainBuilder chain = connector.getFilterChain();
//设定这个过滤器将一行一行(/r/n)的读取数据
chain.addLast("myChin", new ProtocolCodecFilter(new TextLineCodecFactory()));
//设定服务器端的消息处理器:一个SamplMinaServerHandler对象,
connector.setHandler(new HelloWorldClientHandler());
connector.setConnectTimeoutCheckInterval(3000000);
//连结到服务器:
try
{
ConnectFuture cf = connector.connect(new InetSocketAddress("localhost", 9988));
cf.awaitUninterruptibly();
cf.getSession().getCloseFuture().awaitUninterruptibly();
}
catch(Exception e)
{
connector.dispose();
System.out.println("未能连接到服务器");
}
}
}
大功告成:可以运行了。。。。
- 大小: 3 KB
分享到:
相关推荐
这个网上一个牛人写的mina入门知识, 里面有基础介绍和项目开发步骤。 入门还是不错的,写的挺详细。 我把项目也加进来了。
mina的入门例子
mina 基础的入门实例,使用maven+jdk1.7进行构建,使用客户端直接可以进行测试
ApacheMina入门 ApacheMina入门 ApacheMina入门 ApacheMina入门 ApacheMina入门
mina 入门 教程
NULL 博文链接:https://mina-java.iteye.com/blog/1115429
NULL 博文链接:https://royal2xiaose.iteye.com/blog/1558322
Apache Mina入门 Mina能干什么?先拉出来溜一下:我们用它做两个小程序,一个为服务器,收到客户机的消息 后,就回送给客户机;一个是简单的客户机,一连上服务器,就发一条消息报到,然后将从服务 器接到的消息再...
mina是一种高效的互联网网络通信架构,此资料为入门基础。
NULL 博文链接:https://jzkangta.iteye.com/blog/916292
Mina入门 2 第一步.下载使用的Jar包 2 第二步.工程创建配置 2 第三步.服务端程序 3 第四步.客户端程序 6 第五步.长连接VS短连接 8 二. Mina基础 9 1.IoService接口 10 2.1.1 类结构 11 2.1.2 应用 12 2.IoFilter...
一. Mina入门 2 第一步.下载使用的Jar包 2 第二步.工程创建配置 2 第三步.服务端程序 3 第四步.客户端程序 6 第五步.长连接VS短连接 8 二. Mina基础 9 1.IoService接口 10 2.1.1 类结构 11 2.1.2 应用 12 2....
Mina2.0快速入门与源码剖析(个人经验文档)
博文链接:https://aga.iteye.com/blog/174428
NULL 博文链接:https://shihuan830619.iteye.com/blog/1547229