使用mina框架傳輸對象實體

使用mina框架傳輸對象實體方法如下:

 

對像實體

public class TransDataEntity {
	private String md5;
	private String path;
	private String fromIP;
	private byte[] filedata;
	public String getMd5() {
		return md5;
	}
	public void setMd5(String md5) {
		this.md5 = md5;
	}
	public String getPath() {
		return path;
	}
	public void setPath(String path) {
		this.path = path;
	}
	public String getFromIP() {
		return fromIP;
	}
	public void setFromIP(String fromIP) {
		this.fromIP = fromIP;
	}
	public byte[] getFiledata() {
		return filedata;
	}
	public void setFiledata(byte[] filedata) {
		this.filedata = filedata;
	}

}

 

服務端處理類

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;





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 TransDataEntity) {
			TransDataEntity text = (TransDataEntity) message;
			
			System.out.println("服務器接收到從客戶端的getFromIP:" + text.getFromIP());
			System.out.println("服務器接收到從客戶端的getMd5:" + text.getMd5());
			System.out.println("服務器接收到從客戶端的getPath:" + text.getPath());
			System.out.println("服務器接收到從客戶端的文件內容:" + new String(text.getFiledata(), "GBK"));

		}
	}

	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 {

	}

}

 服務端程序

 

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;

import com.koubei.syn.utils.ConfigUtils;

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

	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();
	}
}

 客戶段處理類

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

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("客戶端與服務器的會話打開了……");
	}

	public void sessionClosed(IoSession session) {
	}

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

	public void messageSent(IoSession session, Object tdEntity) throws Exception {
		
		if (null != tdEntity){
			session.write(tdEntity);
		}
		System.out.println("客戶端已經向服務器發送了:");
	}
}
 

客戶端

 

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;


import com.koubei.syn.utils.ConfigUtils;


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() {		

	}

	/**
	 * @author    展俊
	 * @description 客戶端傳數據給服務器端 
	 * @param groupips ip數組 127.0.0.1,127.0.0.2 ...
	 * @param msg 數據實體
	 * 
	 */
	public void messgeSent(String[] groupips, Object msg) {
		chain.addLast("myChin", new ProtocolCodecFilter(new ObjectSerializationCodecFactory()));
		connector.setHandler(ClientHandler.getInstances());
		connector.setConnectTimeoutMillis(30);
		if ((null != groupips) && (groupips.length > 0)) {
			try {
				for (String ip : groupips) {
					ConnectFuture cf = connector.connect(new InetSocketAddress(ip, ConfigUtils.PORT));
					connector.getHandler().messageSent(cf.getSession(), msg);
				}
			} catch (Exception e) {
				
				e.printStackTrace();
			}

		}
	}

	
}

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章