![]() |
|
||||||||||
|
|
|
|||||
|
Регистрация: Nov 2009
Сообщений: 108
|
Здравствуйте!
Прочитал темы тут и справку от адоба. Но всё равно не пойму, что у меня за фигня: ничего не пишу в клиенте, значит файл политик должен грузиться с 843 порта, но он не грузится. (просто нет запроса к серверу, который на 843) Если пишу Опять же, нет никакого эффекта. (просто нет запроса к серверу, который на 843) Так как же верно грузить этот файл? По 80 или 8080 не хочу. |
|
|||||
|
Если вы тестируете на локальной машине и запускаете флешку не через браузер, запроса к 843 порту не будет (насколько мне известно). Покажите код сервера раздающего crossdomain.xml.
|
|
|||||
|
Регистрация: Nov 2009
Сообщений: 108
|
Код с урока на демиарте
Ничего военного /* * To change this template, choose Tools | Templates * and open the template in the editor. */ package Server; import java.io.BufferedReader; import java.io.EOFException; import java.io.IOException; import java.io.InputStreamReader; import java.io.InterruptedIOException; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; /** * Class PolicyServer * Starts a PolicyServer on the specified port. * Can be started as main class, passing the port number as the first command line argument * @author Thomas Meyer, Less Rain (thomas@lessrain.com) * */ public class PolicyServer extends Thread { /** * Если аргумент не передается на сервер будет слушать этот порт для соединения */ public static final int DEFAULT_PORT = 843; public static final String[] DEFAULT_POLICY = new String[] { "*" }; /** * Последовательность символов, прислал Flash Player просить _policy файл */ public static final String POLICY_REQUEST = "<policy-file-request/>"; public static final boolean DEBUG = true; /** * @param args Использование первого аргумента командной строки для установки порт сервера будет слушать для соединений */ public static void main(String[] args) { int port = DEFAULT_PORT; try { if (args.length>0) port = Integer.parseInt(args[0]); } catch (NumberFormatException e) {} // Начало PolicyServer (new PolicyServer( port , new String[] { "*" })).start(); } /* * переменных olicyServer класса */ private int _port; private boolean _listening; private ServerSocket _socketServer; private String _policy; /** * PolicyServer constructor * @param port_ Устанавливает порт, который прослушивает PolicyServer */ public PolicyServer( int port_, String[] allowedHosts_ ) { _port = port_; _listening=true; if (allowedHosts_==null) allowedHosts_ = DEFAULT_POLICY; _policy = buildPolicy(allowedHosts_); } private String buildPolicy( String[] allowedHosts_ ) { StringBuffer policyBuffer = new StringBuffer(); policyBuffer.append("<?xml version=\"1.0\"?><cross-domain-policy>"); for (int i = 0; i < allowedHosts_.length; i++) { String[] hostInfo = allowedHosts_[i].split(":"); String hostname = hostInfo[0]; String ports; if (hostInfo.length>1) ports = hostInfo[1]; else ports = "*"; policyBuffer.append("<allow-access-from domain=\""+hostname+"\" to-ports=\""+ports+"\" />"); } policyBuffer.append("</cross-domain-policy>"); System.out.print(policyBuffer.toString()); return policyBuffer.toString(); } /** * Поток запуска метода, принимает входящие соединения и создает SocketConnection объектов для обработки запросов */ public void run() { try { _listening=true; // Начало прослушивает соединения _socketServer = new ServerSocket(_port,50); if (DEBUG) System.out.println("PolicyServer listening on port "+_port); while(_listening) { // Дождитесь соединения и принять его Socket socket = _socketServer.accept(); try { if (DEBUG) System.out.println("PolicyServer got a connection on port "+_port); // Начать новую тему связи (new SocketConnection(socket)).start(); } catch (Exception e) { if (DEBUG) System.out.println("Exception: "+e.getMessage()); } try { // Подождите секунду, пока новое соединение будет принято, чтобы избежать затопления sleep(1000); } catch (InterruptedException e) {} } } catch(IOException e) { if (DEBUG) System.out.println("IO Exception: "+e.getMessage()); } } /** * Местные SocketConnection класса * Для каждого принятого соединения один SocketConnection создается. * Он ждет _policy файл запроса, возвращает _policy файл и закрывает соединение сразу * @author Thomas Meyer, Less Rain (thomas@lessrain.com) * */ class SocketConnection extends Thread { private Socket _socket; private BufferedReader _socketIn; private PrintWriter _socketOut; /** * Конструктор принимает объект Socket для связи * @param socket_ Socket соединения с клиентом созданные PolicyServer основной поток */ public SocketConnection(Socket socket_) { _socket = socket_; } /** * Тема запуска метода ждет _policy запроса, возвращает poilcy файл и закрывает соединение */ public void run() { try { // инициализации сокета и читателей / писателей _socket.setSoTimeout(10000); _socketIn = new BufferedReader(new InputStreamReader(_socket.getInputStream())); _socketOut =new PrintWriter(_socket.getOutputStream(), true); } catch (IOException e) { if (DEBUG) System.out.println("IO Exception "+e.getMessage()); return; } readPolicyRequest(); } /** * Подождите, и читать _policy запроса, отправленного Flash Player * Вернуться _policy файл и закрыть соединение гнезда */ private void readPolicyRequest() { try { // Читайте запроса и сравнить его с запроса строку, определенную в постоянные. // Если в надлежащем запрос _policy был отправлен выписать _policy файл write(_policy); } catch (Exception e) { if (DEBUG) System.out.println("Exception "+e.getMessage()); } close(); } /** * Читайте до нуля характер передается или максимум 100 символов * @return The character sequence read * @throws IOException * @throws EOFException * @throws InterruptedIOException */ private String read() throws IOException, EOFException, InterruptedIOException { StringBuffer buffer = new StringBuffer(); int codePoint; boolean zeroByteRead=false; if (DEBUG) { System.out.println("Reading..."); } do { codePoint=_socketIn.read(); if (codePoint==0) zeroByteRead=true; else buffer.appendCodePoint( codePoint ); } while (!zeroByteRead && buffer.length()<100); if (DEBUG) System.out.println("Read: "+buffer.toString()); return buffer.toString(); } /** *Записывает строку в клиента * @param msg Текст для отправки клиенту (_policy файл) */ public void write(String msg) { _socketOut.println(msg+"\u0000"); _socketOut.flush(); if (DEBUG) { System.out.println("Wrote: "+msg); } } /** * Закрытие соединения Socket все установить нулевые. Подготовлено для сбора мусора */ public void close() { try { if (_socket!=null) _socket.close(); if (_socketOut!=null) _socketOut.close(); if (_socketIn!=null) _socketIn.close(); System.out.println("Port close."); } catch (IOException e) {} _socketIn=null; _socketOut=null; _socket=null; } } } |
![]() |
![]() |
Часовой пояс GMT +4, время: 23:19. |
|
|
« Предыдущая тема | Следующая тема » |
|
|