Проблема при создании сервера политик Java для простого приложения Flash - PullRequest
0 голосов
/ 03 апреля 2010

Я пытаюсь создать простое приложение чата Flash для образовательных целей, но я застрял, пытаясь отправить файл политики с моего Java-сервера в приложение Flash (после нескольких часов поиска в Google без особой удачи). *

Запрос файла политики достигает сервера, который отправляет хакодированную политику XML обратно в приложение, но приложение Flash, похоже, вообще не реагирует на него, пока не выдаст ошибку изолированной программной среды безопасности.


Я загружаю файл политики, используя следующий код в клиенте:

Security.loadPolicyFile("xmlsocket://myhostname:" + PORT);

Сервер распознает запрос как "<<em> 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 или есть что-то еще, что я мог упустить из виду?

Ответы [ 2 ]

1 голос
/ 08 мая 2013

Я видел ваш подход и через некоторое время пытался написать рабочий класс, прослушивая любой порт, который вы хотите:

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) {}
        }
    }
}
0 голосов
/ 26 ноября 2010

Попробуйте добавить \n в конце политики xml.

...