`

MINA代码再次示例

 
阅读更多
MINA框架的常用类
类NioSocketAcceptor用于创建服务端监听;
类NioSocketConnector用于创建客户端连接;
类IoSession用来保存会话属性和发送消息;
类IoHandlerAdapter用于定义业务逻辑,常用的方法有:
方法 定义
sessionCreated() 当会话创建时被触发
sessionOpened() 当会话开始时被触发
sessionClosed() 当会话关闭时被触发
sessionIdle() 当会话空闲时被触发
exceptionCaught() 当接口中其他方法抛出异常未被捕获时触发此方法
messageRecieved() 当接收到消息后被触发
messageSent() 当发送消息后被触发

服务端应用开发示例
  所需jar包slf4j-api.jar、slf4j-jdk14.jar、MINA-core-2.0.0-M6.jar。

1)、首先定义一个业务逻辑处理器TimeServerHandler,继承自IoHandlerAdapter,实现的功能有:当客户端创建会话时会显示客户端设备的IP和端口;当客户端输入quit时结束会话;客户端输入其它内容时则向客户端发送当前时间。代码如下:

TimeServerHandler :
import java.util.Date;

import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IoSession;

public class TimeServerHandler extends IoHandlerAdapter {

    public void sessionCreated(IoSession session) {
        // 显示客户端的ip和端口
        System.out.println(session.getRemoteAddress().toString()+"1111111111111");
    }

    @Override
    public void messageReceived(IoSession session, Object message)
            throws Exception {
        String str = message.toString();
        System.out.println("str:"+str);
        if (str.trim().equalsIgnoreCase("quit")) {
            session.close();
            // 结束会话return;
        }
        Date date = new Date();
        session.write(date.toString());
        // 返回当前时间的字符串
        System.out.println("Message written..."+"2222222222");
    }

    
}


MinaTimeServer:
import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.charset.Charset;

import org.apache.mina.core.service.IoAcceptor;
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;

public class MinaTimeServer {

    private static final int PORT = 9123;// 定义监听端口

    /**
     * @param args
     * @throws IOException
     */
    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub

        IoAcceptor acceptor = new NioSocketAcceptor();
        acceptor.getFilterChain().addLast("logger", new LoggingFilter());
        acceptor.getFilterChain().addLast("codec",new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8")))); // 指定编码过滤器
        acceptor.setHandler(new TimeServerHandler()); // 指定业务逻辑处理器
        acceptor.setDefaultLocalAddress(new InetSocketAddress(PORT)); // 设置端口号
        acceptor.bind();// 启动监听}
    }

}



2)、客户端代码:

TimeClientHandler:


import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IoSession;

public class TimeClientHandler extends IoHandlerAdapter{
    public TimeClientHandler() {}
    @Override
    public void messageReceived(IoSession session, Object message) throws Exception {
        System.out.println(message);// 显示接收到的消息
        }
}



MinaTimeClient:

import java.net.InetSocketAddress;
import java.nio.charset.Charset;
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.filter.logging.LoggingFilter;
import org.apache.mina.transport.socket.nio.NioSocketConnector;

public class MinaTimeClient {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        // 创建客户端连接器.
        NioSocketConnector connector = new NioSocketConnector();
        connector.getFilterChain().addLast( "logger", new LoggingFilter() );
        connector.getFilterChain().addLast( "codec", new ProtocolCodecFilter( new TextLineCodecFactory( Charset.forName( "UTF-8" ))));        //设置编码过滤器
        connector.setConnectTimeout(30);
        connector.setHandler(new TimeClientHandler());//设置事件处理器
        ConnectFuture cf = connector.connect(new InetSocketAddress("127.0.0.1", 9123));//建立连接
        cf.awaitUninterruptibly();//等待连接创建完成
        cf.getSession().write("hello");//发送消息
        cf.getSession().write("quit");//发送消息
        cf.getSession().getCloseFuture().awaitUninterruptibly();//等待连接断开
        connector.dispose();
    }

}


1)、建立两个工程代码组织如下:



传输对象:

UserInfo:


package Mina.Object;

public class UserInfo implements java.io.Serializable{
    private String name;
    private String QQNum;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getQQNum() {
        return QQNum;
    }
    public void setQQNum(String qQNum) {
        QQNum = qQNum;
    }
}



客户端代码:

ClientHandler:


package Mina.client;

import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IoSession;

import Mina.Object.UserInfo;

public class ClientHandler extends IoHandlerAdapter {
    private static ClientHandler samplMinaClientHandler = null;
    public static ClientHandler getInstances() {
        if (null == samplMinaClientHandler) {
            samplMinaClientHandler = new ClientHandler();
        }
        return samplMinaClientHandler;
    }

    private ClientHandler() {

    }

    public void sessionOpened(IoSession session) throws Exception {
        session.write("客户端与服务器的会话打开了……");
        UserInfo text=new UserInfo();
        text.setName("梅竹寒香");
        text.setQQNum("972341215");
        session.write(text);
    }

    public void sessionClosed(IoSession session) {
    }

    public void messageReceived(IoSession session, Object message)
            throws Exception {
    }

    public void messageSent(IoSession arg0, Object arg1) throws Exception {
        System.out.println("客户端已经向服务器发送了:"+(String)arg1);
    }
}


MainClient:

package Mina.client;

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.serialization.ObjectSerializationCodecFactory;
import org.apache.mina.transport.socket.nio.NioSocketConnector;

public class MainClient {
    private static MainClient mainClient = null;
    NioSocketConnector connector = new NioSocketConnector();
    DefaultIoFilterChainBuilder chain = connector.getFilterChain();

    public static MainClient getInstances() {
        if (null == mainClient) {
            mainClient = new MainClient();
        }
        return mainClient;
    }

    private MainClient() {
        chain.addLast("myChin", new ProtocolCodecFilter(
                new ObjectSerializationCodecFactory()));
        connector.setHandler(ClientHandler.getInstances());
        connector.setConnectTimeout(30);
        ConnectFuture cf = connector.connect(new InetSocketAddress("localhost",
                8888));
    }

    public static void main(String args[]) {
        MainClient.getInstances();
    }
}



服务器端:

ServerHandler:

package Mina.server;

import org.apache.mina.core.filterchain.IoFilterAdapter;
import org.apache.mina.core.service.IoHandler;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;

import Mina.Object.UserInfo;

public class ServerHandler extends IoFilterAdapter implements IoHandler {
    private static ServerHandler samplMinaServerHandler = null;

    public static ServerHandler getInstances() {
        if (null == samplMinaServerHandler) {
            samplMinaServerHandler = new ServerHandler();
        }
        return samplMinaServerHandler;
    }

    private ServerHandler() {

    }

    // 当连接后打开时触发此方法,一般此方法与 sessionCreated 会被同时触发
    public void sessionOpened(IoSession session) throws Exception {
    }
    public void sessionClosed(IoSession session) {
    }
    public void messageReceived(IoSession session, Object message)
            throws Exception {    
        if (message instanceof UserInfo) {
            UserInfo text = (UserInfo) message;
            System.out.println("服务器接收到从客户端的姓名:"+text.getName());
            System.out.println("服务器接收到从客户端的QQ:"+text.getQQNum());
        } 
    }

    public void exceptionCaught(IoSession arg0, Throwable arg1)
            throws Exception {

    }

    // 当消息传送到客户端后触发
    public void messageSent(IoSession arg0, Object arg1) throws Exception {
        
    }

    // 当一个新客户端连接后触发此方法.
    public void sessionCreated(IoSession arg0) throws Exception {
        
    }

    // 当连接空闲时触发此方法.
    public void sessionIdle(IoSession arg0, IdleStatus arg1) throws Exception {
        
    }

}



MainServer:

package Mina.server;

import java.io.IOException;
import java.net.InetSocketAddress;

import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.serialization.ObjectSerializationCodecFactory;
import org.apache.mina.transport.socket.SocketAcceptor;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;

public class MainServer {
    private static MainServer mainServer = null;
    private SocketAcceptor acceptor = new NioSocketAcceptor();
    private DefaultIoFilterChainBuilder chain = acceptor.getFilterChain();
    private int bindPort = 8888;

    public static MainServer getInstances() {
        if (null == mainServer) {
            mainServer = new MainServer();
        }
        return mainServer;
    }

    private MainServer() {
        chain.addLast("myChin", new ProtocolCodecFilter(
                new ObjectSerializationCodecFactory()));
        acceptor.setHandler(ServerHandler.getInstances());
        try {
            acceptor.bind(new InetSocketAddress(bindPort));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) throws Exception {
        MainServer.getInstances();
    }
}
















分享到:
评论

相关推荐

    mina客户端简单代码示例

    标题中的"mina客户端简单代码示例"意味着我们将探讨如何使用Mina框架编写一个基础的客户端程序,该程序能够连接到服务器并发送数据。描述指出,运行这个客户端程序(minaTestClient)会展示一个窗口,用户可以通过...

    mina编解码示例

    mina编解码示例是基于Apache Mina框架的一个实践项目,主要展示了如何在Mina中进行数据的编码和解码操作。Apache Mina是一个高度可扩展的网络通信框架,广泛应用于开发高性能、高并发的网络应用程序,如TCP/IP和UDP...

    Mina 1.1.7 示例源码(apache.mina.example)

    提到这个示例可以在MyEclipse或Eclipse中直接运行,意味着开发者可以将源码导入到这些IDE中,利用它们的调试工具和代码编辑功能进行学习和开发。 5. **学习与交流** 这个示例集合是为了学习和交流而准备的,...

    mina服务器简单代码示例

    本示例将介绍如何使用Mina实现一个简单的服务器端代码,并运行MinaTimeServer。 在Java中,Mina提供了一种事件驱动、异步编程模型,使得开发者可以更高效地处理网络通信。其核心组件包括Acceptor(监听器)、...

    Mina 服务端客户端示例程序

    在这个"Mina服务端客户端示例程序"中,我们可能找到了一系列用于展示如何使用Mina框架搭建服务端和客户端的代码示例。下面我们将深入探讨Mina的核心概念以及如何通过这些示例进行学习和实践。 1. **非阻塞I/O**:...

    apache mina 简单示例

    9. **测试与调试**:在"TestMina"这个文件中,可能包含了服务端和客户端的测试代码,用于验证Mina应用的功能。通过断言和日志输出,你可以检查数据是否正确传输,连接是否成功建立等。 学习Apache Mina时,理解以上...

    mina项目示例

    在压缩包文件"apache-mina"中,可能包含了MINA框架的源码、示例代码、配置文件以及其他相关资源,这些都是学习和研究MINA的好材料。开发者可以通过阅读这些代码,进一步了解MINA在实际应用中的具体实现方式。

    mina传输对象的示例

    在标题和描述中提到的“mina传输对象的示例”指的是如何在Mina框架下处理和传输自定义的数据对象。Mina允许开发者通过事件驱动和异步I/O模型来高效地构建网络服务。 Mina的核心组件包括: 1. **Session**: 表示...

    MINA 2.0.7 官方示例

    在2.0.7版本中,官方提供了一系列示例来帮助开发者理解和使用MINA框架。 首先,MINA的核心概念是“Session”和“Filter”。Session代表了网络连接,是MINA中处理I/O事件的基础。而Filter则类似于拦截器,用于处理在...

    mina简单示例

    标题中的"mina简单示例"指的是使用Apache Mina框架构建一个简单的客户端和服务端的程序。在Java开发中,Mina提供了一种高效的方式来处理网络连接和数据传输,特别适合于构建大型、复杂的网络服务。 描述中的"mina...

    mina开发示例

    最近使用Mina开发一个Java的NIO服务端程序,因此也特意学习了Apache的这个Mina框架。 首先,Mina是个什么东西?看下官方网站(http://mina.apache.org/)对它的解释: Apache的Mina(Multipurpose Infrastructure ...

    mina源代码学习提供下载

    - **测试代码**:MINA的测试代码通常包含了大量示例,是学习MINA如何工作的良好资源。 通过阅读和分析MINA的源代码,你可以更深入地了解其内部工作原理,学习如何利用MINA构建高性能的网络服务。这包括但不限于理解...

    mina2.x开发示例

    **Mina2.x开发示例** Apache Mina是一个开源项目,提供了一个高度可扩展的网络通信框架,适用于各种协议,如TCP、UDP和HTTP。它主要用于简化开发高性能、高并发的网络应用程序,如服务器和客户端。在Mina2.x版本中...

    Mina通信框架应用示例

    《Mina通信框架应用详解》 Mina通信框架,全称为Apache MINA,是一个高度可扩展的、基于Java的网络应用程序开发框架。MINA的名字来源于多语言(Multi-purpose Infrastructure for Network Applications),它提供了...

    Apache mina源代码框架解析

    在这个文档中,我们将简要分析Mina 2.0框架的源代码,并通过一个简单的时钟服务器示例来了解其工作原理。 首先,我们来看`MinaTimeServer`类。这个类是Mina服务器的主入口点,它创建了一个`NioSocketAcceptor`实例...

    Mina客户端示例

    **Mina客户端示例** Apache Mina是一个高度可扩展的网络通信框架,它为Java应用程序提供了简单的API来处理TCP/IP、UDP和其他协议的网络通信。在这个"Mina客户端示例"中,我们主要关注如何利用Mina框架构建一个...

    Mina Socket 源代码

    在这个简单示例中,我们将深入探讨 Mina Socket 的核心概念和源代码分析。 1. **Mina 架构** Mina 使用事件驱动和异步处理模型,使得它能够高效地处理大量并发连接。它的架构由三个主要组件组成:Filter、Session ...

    Mina基础示例

    Mina基础示例 Mina,全称是Java Mina框架,是一个开源的网络通信应用框架,主要用于构建高性能、高可用性的网络服务器。Mina旨在简化网络编程,它提供了高级抽象,如事件驱动和异步I/O,使得开发者能够专注于业务...

    mina2.0.3源代码

    MINA提供了一套完整的API文档和示例代码,帮助开发者快速理解和使用框架。其清晰的API设计使得学习曲线相对平缓,降低了开发网络应用的难度。 在“apache-mina-2.0.3”这个压缩包中,包含了MINA框架的源代码,...

    MINA—TCP案例

    MINA(Java Multicast Network Application Programming Interface)是一个高性能、异步事件驱动的网络应用程序框架,主要...在实际的Client文件中,应该包含了实现上述功能的具体代码示例,可以作为学习和参考的基础。

Global site tag (gtag.js) - Google Analytics