Mina-01:简单通信实现

1.准备jar包

如果是maven工程:

<!--MINA start -->
<dependency>
	<groupId>org.apache.mina</groupId>
	<artifactId>mina-core</artifactId>
	<version>2.0.2</version>
</dependency>
<!--MINA end -->

如果是普通java工程,jar包如下:

mina-core

2.开始编程

服务端:

package com.liming.MinaTest;

import java.io.IOException;
import java.net.InetSocketAddress;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;

public class Main {
    public static int port = 9898;
    public static void main(String[] args) {

        NioSocketAcceptor acceptor = new NioSocketAcceptor();

        try {
            //设置handler
            acceptor.setHandler(new MyHandler());
            //设置过滤器
            acceptor.getFilterChain().addLast("codec", new ProtocolCodecFilter(new TextLineCodecFactory()));
            //绑定端口号
            acceptor.bind(new InetSocketAddress(port));

        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}
package com.liming.MinaTest;

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

public class MyHandler implements IoHandler {

    public void exceptionCaught(IoSession arg0, Throwable arg1)
            throws Exception {
        System.out.println("exception");
    }

    public void inputClosed(IoSession arg0) throws Exception {
        System.out.println("inputClosed");
    }

    public void messageReceived(IoSession arg0, Object arg1) throws Exception {
        String msg = (String) arg1;
        System.out.println("messageReceived server: " + msg);
        arg0.write(msg);
    }

    public void messageSent(IoSession arg0, Object arg1) throws Exception {
        System.out.println("messageSent");
    }

    public void sessionClosed(IoSession arg0) throws Exception {
        System.out.println("sessionClosed "+arg0.hashCode());
    }

    public void sessionCreated(IoSession arg0) throws Exception {
        System.out.println("sessionCreated "+arg0.hashCode());

    }

    public void sessionIdle(IoSession arg0, IdleStatus arg1) throws Exception {
        System.out.println("sessionIdle "+arg0.hashCode()+" , "+arg1);
    }

    public void sessionOpened(IoSession arg0) throws Exception {
        System.out.println("sessionOpened "+arg0.hashCode());
    }

}

客户端:

package com.liming.MinaTest;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.InetSocketAddress;
import java.net.Socket;

import org.apache.mina.core.future.ConnectFuture;
import org.apache.mina.core.session.IoSession;
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 SocketClient {

    public int port = 9898;
    public String hostAddress = "127.0.0.1";

    public static void main(String[] args) throws IOException {

        NioSocketConnector connector = new NioSocketConnector();
        connector.setHandler(new MyClientHandler());
        connector.getFilterChain().addLast("codec", new ProtocolCodecFilter(new TextLineCodecFactory()));
        ConnectFuture future = connector.connect(new InetSocketAddress("127.0.0.1", 9898));
        future.awaitUninterruptibly();//等待连接
        IoSession session = future.getSession();
        BufferedReader inputReader = new BufferedReader(new InputStreamReader(System.in));
        String inputContent;
        while (!(inputContent = inputReader.readLine()).equals("bye")) {
            session.write(inputContent);
        }

    }


}
package com.liming.MinaTest;

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

public class MyClientHandler implements IoHandler {

    public void exceptionCaught(IoSession arg0, Throwable arg1)
            throws Exception {
        System.out.println(arg1.getCause());
    }

    public void inputClosed(IoSession arg0) throws Exception {
//      System.out.println("inputClosed");
    }

    public void messageReceived(IoSession arg0, Object arg1) throws Exception {
        String msg = (String) arg1;
        System.out.println("client messageReceived: " + msg);
    }

    public void messageSent(IoSession arg0, Object arg1) throws Exception {
        System.out.println("client messageSent->" + (String)arg1);
    }

    public void sessionClosed(IoSession arg0) throws Exception {
        System.out.println("sessionClosed "+arg0.hashCode());
    }

    public void sessionCreated(IoSession arg0) throws Exception {
        System.out.println("sessionCreated "+arg0.hashCode());



    }

    public void sessionIdle(IoSession arg0, IdleStatus arg1) throws Exception {
        System.out.println("sessionIdle "+arg0.hashCode()+" , "+arg1);
    }

    public void sessionOpened(IoSession arg0) throws Exception {
        System.out.println("sessionOpened "+arg0.hashCode());
    }

}

3.源码包:

点击打开链接




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值