Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Серверные технологии и Flash (http://www.flasher.ru/forum/forumdisplay.php?f=62)
-   -   Загрузка crossdomain.xml по сокету (http://www.flasher.ru/forum/showthread.php?t=179039)

KVinS 05.05.2012 01:52

Загрузка crossdomain.xml по сокету
 
Здравствуйте!

Прочитал темы тут и справку от адоба. Но всё равно не пойму, что у меня за фигня:
ничего не пишу в клиенте, значит файл политик должен грузиться с 843 порта, но он не грузится. (просто нет запроса к серверу, который на 843)
Если пишу
Код AS3:

Security.loadPolicyFile("xmlsocket://"+serverURL+":843");
socket = new Socket();

Опять же, нет никакого эффекта. (просто нет запроса к серверу, который на 843)

Так как же верно грузить этот файл?

По 80 или 8080 не хочу.

bav 05.05.2012 02:32

Если вы тестируете на локальной машине и запускаете флешку не через браузер, запроса к 843 порту не будет (насколько мне известно). Покажите код сервера раздающего crossdomain.xml.

KVinS 06.05.2012 04:04

Код с урока на демиарте
Ничего военного
Код AS3:

/*
 * 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, время: 22:44.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.