首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 开源软件 >

MINA客户端与服务端通讯实例

2012-09-20 
MINA客户端与服务端通信实例Apache MINA(Multipurpose Infrastructure for Network Applications) 是 Apac

MINA客户端与服务端通信实例

Apache MINA(Multipurpose Infrastructure for Network Applications) 是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便

??MINA客户端与服务端通讯实例

/** * @author aniyo * blog: http://aniyo.iteye.com */public class MinaTimeServer { // 服务器监听端口private static final int PORT = 8888;/** * */public MinaTimeServer() {// TODO Auto-generated constructor stub}/** * @param args */public static void main(String[] args) {// 服务器端的主要对象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(PORT) );}catch(Exception e){e.printStackTrace();}}}

?

?

服务端业务处理类:

package aniyo.mina.server;import java.util.Date;import org.apache.mina.core.service.IoHandlerAdapter;import org.apache.mina.core.session.IoSession;/** * @author aniyo * blog: http://aniyo.iteye.com * 继承自IoHandlerAdapter,IoHandlerAdapter继承接口 IoHandler        类IoHandlerAdapter实现了IoHandler的所有方法,只要重载关心的几个方法就可以了 */public class TimeServerHandler extends IoHandlerAdapter {@Overridepublic void exceptionCaught(IoSession session, Throwable cause)throws Exception {cause.printStackTrace();}    /*     * 这个方法是目前这个类里最主要的,     * 当接收到消息,只要不是quit,就把服务器当前的时间返回给客户端     * 如果是quit,则关闭客户端连接*/@Overridepublic 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("i am recived");System.out.println("Message written...");}@Overridepublic void sessionClosed(IoSession session) throws Exception {// TODO Auto-generated method stubsuper.sessionClosed(session);System.out.println("客户端与服务端断开连接.....");}}

?

?

客户端:

package aniyo.mina.server;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;     /**   * mina客户端   * @author aniyo    * blog:http://aniyo.iteye.com */  public class MinaClient {         public static void main(String []args)throws Exception{                      //Create TCP/IP connection           NioSocketConnector connector = new NioSocketConnector();                      //创建接受数据的过滤器           DefaultIoFilterChainBuilder chain = connector.getFilterChain();                      //设定这个过滤器将一行一行(/r/n)的读取数据           chain.addLast("myChin", new ProtocolCodecFilter(new TextLineCodecFactory()));                      //客户端的消息处理器:一个SamplMinaServerHander对象           connector.setHandler(new MinaClientHandler());                      //set connect timeout           connector.setConnectTimeout(30);                      //连接到服务器:           ConnectFuture cf = connector.connect(new InetSocketAddress("localhost",8888));                      //Wait for the connection attempt to be finished.           cf.awaitUninterruptibly();                      cf.getSession().getCloseFuture().awaitUninterruptibly();                      connector.dispose();       }  }

?

客户端业务逻辑处理类:

package aniyo.mina.server;import org.apache.mina.core.service.IoHandlerAdapter;import org.apache.mina.core.session.IoSession;/** * 客户端业务处理逻辑 *  * @author aniyo blog: http://aniyo.iteye.com */public class MinaClientHandler extends IoHandlerAdapter {// 当客户端连接进入时@Overridepublic void sessionOpened(IoSession session) throws Exception {System.out.println("incomming 客户端: " + session.getRemoteAddress());session.write("i am coming");}@Overridepublic void exceptionCaught(IoSession session, Throwable cause)throws Exception {System.out.println("客户端发送信息异常....");}// 当客户端发送消息到达时@Overridepublic void messageReceived(IoSession session, Object message)throws Exception {System.out.println("服务器返回的数据:" + message.toString());}@Overridepublic void sessionClosed(IoSession session) throws Exception {System.out.println("客户端与服务端断开连接.....");}@Overridepublic void sessionCreated(IoSession session) throws Exception {// TODO Auto-generated method stubSystem.out.println("one Client Connection" + session.getRemoteAddress());session.write("我来了······");}}

?

先启动服务器,再启动客户端,就ok了?

不写客户端也可用

在运行里输入cmd-->telnet localhost 8888? 就可以了

?

?

热点排行