初识java之Mina(一)

Apache Mina Server 是一个网络通信应用框架,也就是说,它主要是对基于 TCP/IP、UDP/IP协议栈的通信框架(当然,也可以提供 JAVA 对象的序列化服务、虚拟机管道通信服务等),Mina 可以帮助我们快速开发高性能、高扩展性的网络通信应用,Mina 提供了事件驱动、异步(Mina 的异步 IO 默认使用的是 JAVA NIO 作为底层支持)操作的编程模型。

首先先写个简单的server,来实现异步的文件上传。

public class Main {
	private static final int PORT = 8080;
	public static void main(String[] args) throws Exception {
		NioSocketAcceptor accept = new NioSocketAcceptor();
		accept.getFilterChain().addLast("codec",
				new ProtocolCodecFilter(new ObjectSerializationCodecFactory()));
		accept.getFilterChain().addLast("logging", new LoggingFilter());
		accept.setHandler(new FileUploadHandler());
		accept.bind(new InetSocketAddress(PORT));

		System.out.println("upload  server started.");
	}
}

handle的处理就狠简单了。

public class FileUploadHandler extends IoHandlerAdapter {
	private BufferedOutputStream out;
	private int count;
	private static final Log log = LogFactory.getLog(FileUploadHandler.class);
	public void sessionOpened(IoSession session) throws Exception {
		System.out.println("server open");
	public void exceptionCaught(IoSession session, Throwable cause)
			throws Exception {
		System.out.println("exception");
		session.close(true);
		super.exceptionCaught(session, cause);
	}
	public void messageReceived(IoSession session, Object message) {
		System.out.println("server received");
		try {
			if (message instanceof FileUploadRequest) {
				FileUploadRequest request = (FileUploadRequest) message;
				System.out.println(request.getFilename());
				if (out == null) {
					String [] array = request.getFilename().split("//");
					System.out.println(array[1]);
					out = new BufferedOutputStream(new FileOutputStream("D://"+array[1]));
					out.write(request.getFileContent());
				} else {
					out.write(request.getFileContent());
				}
				count += request.getFileContent().length;
			} else if (message instanceof String) {
				if (((String) message).equals("finish")) {
					System.out.println("size is " + count);
					out.flush();
					out.close();
					out = null;
					session.write("success");
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	public void sessionClosed(IoSession session) throws Exception {
		System.out.println("server session close");
	}
}

  

原文地址:https://www.cnblogs.com/huangxiaohen/p/3950032.html