Mina入门

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的创建

准备工作
您需要准备如下包:
[img]/upload/attachment/98335/04eea885-d89a-3bfa-a4b8-a4053668d056.bmp[/img]
下载地址如下:
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("未能连接到服务器");
}
}
}

大功告成:可以运行了。。。。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值