Apache MINA客户端服务器简单实例
来源:互联网 发布:淘宝店铺搜索搜不出来 编辑:程序博客网 时间:2024/04/29 22:22
其实客户端和服务器是相对的,互发消息,在底层当然是互为服务器客户端.只是这里为了封装区分开了.
首先
需要导入的包:
log4j.jar
mina-core-2.0.4.jar
slf4j-api-1.6.3.jar
slf4j-log4j12-1.6.3.jar
服务端代码:
/** */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();}}}
服务端业务处理类:这个业务处理类就是mina给我们分开的,把收发消息和业务处理分开了.你发送消息,监听端口是一个地方.然后业务处理是另一个地方,这样你就可以更加灵活的操作业务逻辑,不用关心底层的数据发送.
package aniyo.mina.server;import java.util.Date;import org.apache.mina.core.service.IoHandlerAdapter;import org.apache.mina.core.session.IoSession;/** * 继承自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客户端 */ 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;/** * 客户端业务处理逻辑 */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("我来了······");}}
mina的性能很高,解决一般的数据库交互绝对没问题,和其它技术结合,实现基于消息传递非常好,其中openFire就是实现的mina框架,来解决客户端服务器通信的.建议大家了解一下.
- Apache MINA客户端服务器简单实例
- Apache的Mina简单实例
- Apache的Mina简单实例
- Apache-mina客户端服务器端入门实例
- Apache Mina - 简单的服务端和客户端的搭建
- mina客户端实例
- ios客户端 mina服务器
- mina服务器、客户端
- apache mina 实例
- Apache Mina实例
- Apache Mina 入门实例
- Apache Mina 入门实例
- Luasocket 服务器,客户端简单实例
- Mina学习笔记(二) 简单客户端实例
- Apache 服务器简单配置实例
- Apache MINA 基于TCP实例
- Apache MINA 基于UDP实例
- APACHE MINA之ECHO服务器
- POJ-1860-Currency Exchange
- tftp协议相关问题(arm板和虚拟机)
- 引用與指針
- 康托展开
- Android源码阅读笔记(应用安装,LOG抓取等)
- Apache MINA客户端服务器简单实例
- 使用Redis bitmaps进行快速、简单、实时统计
- 设备I/O之OVERLAPPED(IO重叠)
- 如何搭建Selenium-Grid2环境(Java)
- COM组件和动态链接库的区别
- 使用C#开发ActiveX控件(新)
- 聚合索引和非聚合索引
- jQuery 万能的选择器
- Java杂记——如何遍历Array和Set