加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

MINA 开发入门实例--用于FLEX的843端口

发布时间:2020-12-15 04:16:31 所属栏目:百科 来源:网络整理
导读:?最近由于公司业务需要,开始学习mima框架 ,贴上一个简单的入门实例. ? ? ?该实例主要实现的功能是: 开启一个843监听端口,其作用是为FLEX的安全沙箱机制提供策略文件(可不管这是干什么的)。 WebFlex843Server类 package com.demo.service843;import jav

?最近由于公司业务需要,开始学习mima框架 ,贴上一个简单的入门实例.

? ? ?该实例主要实现的功能是:

开启一个843监听端口,其作用是为FLEX的安全沙箱机制提供策略文件(可不管这是干什么的)。


WebFlex843Server类

package com.demo.service843;

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

import org.apache.log4j.Logger;
import org.apache.mina.core.service.IoAcceptor;
import org.apache.mina.core.session.IdleStatus;
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 WebFlex843Server {

	private final static Logger logger = Logger.getLogger(WebFlex843Server.class);
	//端口号		
	private final static int PORT = 843;

	public void startWf843Server() {

		// 非阻塞的
		IoAcceptor acceptor = new NioSocketAcceptor();

		// 过滤器,客服端上传上来的信息必须以">"结尾;且服务器端下发的信息末尾自动加上">"
		acceptor.getFilterChain().addLast(
				"codec",new ProtocolCodecFilter(new TextLineCodecFactory(Charset
						.forName("UTF-8"),">",">")));

		// 绑定逻辑处理器
		acceptor.setHandler(new WebFlex843ServerHandler());

		// 设置缓冲区大小和读写通道10秒内无操作进入空闲状态
		acceptor.getSessionConfig().setReadBufferSize(2048);
		acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE,10);

		// 绑定端口
		try {
			acceptor.bind(new InetSocketAddress(PORT));
		} catch (IOException e) {
			logger.info("异常:WebFlex服务器绑定端口号:" + PORT + ",出现异常");
			return;
		}

		logger.info("WebFlxe843服务器已启动,监听端口" + PORT + " ...");
	}	

FlexServerHandler 类

package com.demo.service843;

import org.apache.log4j.Logger;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;

public class WebFlex843ServerHandler extends IoHandlerAdapter {

	private final static Logger logger = Logger
			.getLogger(WebFlex843ServerHandler.class);

	/**
	 * AS要接收结尾的字符串
	 */
	private static final String SECURITY_FILE = "<?xml version="1.0"?>"
			+ "<cross-domain-policy>"
			+ "<site-control permitted-cross-domain-policies="all"/>"
			+ "<allow-access-from domain="*" to-ports="*" />"
			+ "</cross-domain-policy>";

	@Override
	public void sessionOpened(IoSession session) {
		logger.info("发现用户登录843服务器");
	}

	/**
	 * Trap exceptions.
	 */
	@Override
	public void exceptionCaught(IoSession session,Throwable cause)
			throws Exception {
		cause.printStackTrace();
		session.close(true);
		if (cause.getMessage().indexOf("远程主机强迫关闭") >= 0) {
			logger.info("侦测到:本地Web-Flex的Client的Session关闭,自动关闭其连接的session");
		}
	}

	/**
	 * If the message is 'quit',we exit by closing the session. Otherwise,we
	 * return the current date.
	 */
	@Override
	public void messageReceived(IoSession session,Object message)
			throws Exception {
		String msg = message.toString();
		
		if (msg.length() < 0)
			return;

		if (msg.contains("<policy-file-request/>")) {
			session.write(SECURITY_FILE);
		} else
			session.write(SECURITY_FILE);

	}

	/**
	 * On idle,we just write a message on the console
	 */
	@Override
	public void sessionIdle(IoSession session,IdleStatus status)
			throws Exception {
		System.out.println("IDLE " + session.getIdleCount(status));
	}

}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读