我正在尝试创建一个简单的Flash聊天应用程序用于教育目的,但我一直试图将我的Java服务器的策略文件发送到Flash应用程序(经过几个小时的谷歌搜索后运气不佳)。
策略文件请求到达将受控制的策略xml发送回应用程序的服务器,但Flash应用程序似乎根本没有对它做出反应,直到它给我一个安全沙箱错误。
我正在使用客户端中的以下代码加载策略文件:
Security.loadPolicyFile("xmlsocket://myhostname:" + PORT);
服务器将请求识别为“< policy-file-request /> ”并通过向客户端发送以下xml字符串进行响应:
public static final String POLICY_XML =
"<?xml version=\"1.0\"?>"
+ "<cross-domain-policy>"
+ "<allow-access-from domain=\"*\" to-ports=\"*\" />"
+ "</cross-domain-policy>";
用于发送它的代码如下所示:
try {
_dataOut.write(PolicyServer.POLICY_XML + (char)0x00);
_dataOut.flush();
System.out.println("Policy sent to client: " + PolicyServer.POLICY_XML);
} catch (Exception e) {
trace(e);
}
我是否用xml搞砸了什么?还是有其他我可能忽略的东西?
答案 0 :(得分:1)
我见过你的方法,经过一段时间的努力我写了一个工人阶级,听你想要的任何端口:
package Server;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
public class PolicyServer {
public static final String POLICY_XML =
"<?xml version=\"1.0\"?>"
+ "<cross-domain-policy>"
+ "<allow-access-from domain=\"*\" to-ports=\"*\" />"
+ "</cross-domain-policy>";
public PolicyServer(){
ServerSocket ss = null;
try {
ss = new ServerSocket(843);
} catch (IOException e) {e.printStackTrace();}
while(true){
try {
final Socket client = ss.accept();
new Thread(new Runnable() {
@Override
public void run() {
try {
client.setSoTimeout(10000); //clean failed connections
client.getOutputStream().write(PolicyServer.POLICY_XML.getBytes());
client.getOutputStream().write(0x00); //write required endbit
client.getOutputStream().flush();
BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
//reading two lines emties flashs buffer and magically it works!
in.readLine();
in.readLine();
} catch (IOException e) {
}
}
}).start();
} catch (Exception e) {}
}
}
}
答案 1 :(得分:-1)
尝试在政策xml的末尾添加\n
。