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