Flex socket 安全策略 請求

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


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