Flex socket 安全策略 请求

9 篇文章 0 订阅

转载自http://blog.csdn.net/ycf330/article/details/4068728

最近遇到这个问题,去网上找了一些资料说请是下面这样的

1,首先检测目标服务器的843端口是否提供安全策略
2,如果1没有检测到策略,则检测actionscript是否使用了Security.loadPolicyFile(xmlsocket://) 手段提供安全策略,如果还没检测到,则使用第3步检测
3,检测目标服务器目标端口是否提供安全策略

 

解决办法是:建一个843的ServerSocket或者是其他端口的ServerSocket(要在connect前调用Security.loadPolicyFile(“xmlsocket://ip:port”)),或者是被调ServerSocket。返回

xml="<cross-domain-policy> "
+ "<allow-access-from domain=\"*\" to-ports=\"*\"/>"
+ "</cross-domain-policy>";

下面是网上找到843服务端代码:

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class SecurityXMLServer implements Runnable {
	private ServerSocket server;
	private BufferedReader reader;
	private BufferedWriter writer;
	private String xml;

	public SecurityXMLServer() {
		xml = "<cross-domain-policy> "
				+ "<allow-access-from domain=\"*\" to-ports=\"*\"/>"
				+ "</cross-domain-policy> ";
		// 启动843端口
		createServerSocket(843);
		new Thread(this).start();
	}
	
	public static void main(String[] args) {
		new SecurityXMLServer();
	}

	// 启动服务器
	private void createServerSocket(int port) {
		try {
			server = new ServerSocket(port);
			System.out.println("服务监听端口:" + port);
		} catch (IOException e) {
			System.exit(1);
		}
	}

	// 启动服务器线程
	public void run()
	   {
	     while (true) {
	       Socket client = null;
	       try {
	        //接收客户端的连接
	         client = server.accept();

	         InputStreamReader input = new InputStreamReader(client.getInputStream(), "UTF-8");
	         reader = new BufferedReader(input);
	         OutputStreamWriter output = new OutputStreamWriter(client.getOutputStream(), "UTF-8");
	         writer = new BufferedWriter(output);

//	         //读取客户端发送的数据
	         StringBuilder data = new StringBuilder();
	         int c = 0;
	         while ((c = reader.read()) != -1)
	         {
	           if (c != '\0')
	             data.append((char) c);
	           else
	             break;
	         }
	         String info = data.toString();
	         System.out.println("输入的请求: " + info);
	        
	         //接收到客户端的请求之后,将策略文件发送出去
	         if(info.indexOf("<policy-file-request/>") >=0)
	         {
	           writer.write(xml + "\0");
	           writer.flush();
	           System.out.println("将安全策略文件发送至: " + client.getInetAddress());
	         }
	         else
	         {
	           writer.write("请求无法识别/0");
	           writer.flush();
	           System.out.println("请求无法识别: "+client.getInetAddress());
	         }
	         client.close();
	       } catch (Exception e) {
	         e.printStackTrace();
	         try {
	           //发现异常关闭连接
	           if (client != null) {
	             client.close();
	             client = null;
	           }
	         } catch (IOException ex) {
	           ex.printStackTrace();
	         } finally {
	           //调用垃圾收集方法
	           System.gc();
	         }
	       }
	     }
	   }
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值