【问题标题】:Trouble creating a Java policy server for a simple Flash app为简单的 Flash 应用程序创建 Java 策略服务器时遇到问题
【发布时间】:2011-02-03 22:05:09
【问题描述】:

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

【问题讨论】:

    标签: java flash cross-domain policy


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      我已经看到了你的方法,经过一段时间的尝试,我编写了一个工作类,监听你想要的任何端口:

      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) {}
              }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-09-04
        • 1970-01-01
        • 1970-01-01
        • 2011-08-23
        • 2015-03-27
        • 1970-01-01
        • 2021-12-07
        • 1970-01-01
        相关资源
        最近更新 更多