nio/mina(二)mina传字符串

服务端:

MainServer.java

package com.nafio.mina;

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 MainServer {

	/**
	 * @param args
	 */
	public static void main(String[] args) throws Exception{
		//创建一个非阻塞的Server端Socket
		SocketAcceptor acceptor = new NioSocketAcceptor();
		//创建接收数据的过滤器
		DefaultIoFilterChainBuilder chain = acceptor.getFilterChain();
		//设定这个过滤器将一行一行(/r/n)的读取数据
		chain.addLast("myChin", new ProtocolCodecFilter(new
		TextLineCodecFactory()));
		//设定服务器端的消息处理器:一个SamplMinaServerHandler对象,
		acceptor.setHandler(new MinaServerHandler());
		// 服务器端绑定的端口
		int bindPort=9988;
		//绑定端口,启动服务器
		acceptor.bind(new InetSocketAddress(bindPort));
		System.out.println("Mina Server is Listing on:= " + bindPort);
	}

}


2 MinaServerHandler.java

package com.nafio.mina;

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

public class MinaServerHandler extends IoHandlerAdapter{

	/**
	 * 当客户端发送消息到达时
	 */

	public void messageReceived(IoSession session, Object message)
	throws Exception {
		//super.messageReceived(session, message);
		//我们己设定了服务器解析消息的规则是一行一行读取,这里就可转为String:
		
		System.out.println("ServerMessageReceived");
		
		String s=(String)message;
		// Write the received data back to remote peer
		System.out.println("服务端->收到客户机发来的消息: "+s);
		//测试将消息回送给客户端
		session.write(s+count);
		count++;
	}
	private int count = 0;

	public void messageSent(IoSession session, Object message) throws Exception {
		System.out.println("服务端->messageSent");
	}


	public void sessionClosed(IoSession session) throws Exception {
		System.out.println("服务端->sessionClosed");
	}

	@Override
	public void sessionCreated(IoSession session) throws Exception {
		System.out.println("服务端->sessionCreated");
	}

	/**
	 * 当新客户端连接时调用
	 */

	public void sessionOpened(IoSession session) throws Exception {
		System.out.println("服务端->Open");
	}

}


 

客户端:

1 MainClient.java

package com.nafio.mina;

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 MainClient {
	public static void main(String[] args) throws Exception{
		// 创建 TCP/IP connector.
		NioSocketConnector connector = new NioSocketConnector();
		// 创建接收数据的过滤器
		DefaultIoFilterChainBuilder chain = connector.getFilterChain();
		//设定这个过滤器将一行一行(/r/n)的读取数据
		chain.addLast("myChin", new ProtocolCodecFilter(new
		TextLineCodecFactory()));
		//设定服务器端的消息处理器:一个SamplMinaServerHandler对象,
		connector.setHandler(new MinaClientHandler());
		// Set connect timeout.
		connector.setConnectTimeout(30);
		//连结到服务器:
		ConnectFuture cf = connector.connect(new
		InetSocketAddress("localhost", 9988));
		
		cf.awaitUninterruptibly();
		cf.getSession().getCloseFuture().awaitUninterruptibly();
		connector.dispose();
	}
}


2 MinaClientHandler.java

package com.nafio.mina;

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

public class MinaClientHandler extends IoHandlerAdapter{


	/**
	 * 当客户端发送的消息到达时
	 */
	@Override
	public void messageReceived(IoSession session, Object message)
	throws Exception {

		String s=(String)message;
		System.out.println("客户端->服务器发来的消息: "+s);
	}


	@Override
	public void messageSent(IoSession session, Object message) throws Exception {
		super.messageSent(session, message);
		System.out.println("客户端->messageSent");
	}

	@Override
	public void sessionClosed(IoSession session) throws Exception {
		System.out.println("客户端->sessionClosed");
	}

	@Override
	public void sessionCreated(IoSession session) throws Exception {
		System.out.println("客户端->sessionCreated");
	}

	@Override
	public void sessionOpened(IoSession session) throws Exception {
		System.out.println("客户端->sessionOpened");

		//发送信息
		try
		{
			SendMsg(session);
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
	}

	//by nafio 自己写的函数
	public void SendMsg(IoSession session) throws Exception{
		//		TransferClass tansferClass=new TransferClass();
		//		tansferClass.setNum(1);
		//		tansferClass.setString("字符串");
		String tansferStr="我是数据";
		session.write(tansferStr);	
	}


}


 

原文地址:https://www.cnblogs.com/nafio/p/9137764.html