0

我正在尝试为教育目的创建一个简单的 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 搞砸了,还是我可能忽略了其他一些东西?

4

2 回答 2

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) {}
        }
    }
}
于 2013-05-08T09:47:01.923 回答
-1

尝试\n在策略 xml 的末尾添加。

于 2010-11-26T08:54:23.973 回答