Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > Серверные технологии и Flash

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 05.05.2012, 01:52
KVinS вне форума Посмотреть профиль Отправить личное сообщение для KVinS Найти все сообщения от KVinS
  № 1  
Ответить с цитированием
KVinS

Регистрация: Nov 2009
Сообщений: 108
Question Загрузка crossdomain.xml по сокету

Здравствуйте!

Прочитал темы тут и справку от адоба. Но всё равно не пойму, что у меня за фигня:
ничего не пишу в клиенте, значит файл политик должен грузиться с 843 порта, но он не грузится. (просто нет запроса к серверу, который на 843)
Если пишу
Код AS3:
Security.loadPolicyFile("xmlsocket://"+serverURL+":843");
socket = new Socket();
Опять же, нет никакого эффекта. (просто нет запроса к серверу, который на 843)

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

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

Старый 05.05.2012, 02:32
bav вне форума Посмотреть профиль Отправить личное сообщение для bav Найти все сообщения от bav
  № 2  
Ответить с цитированием
bav
 
Аватар для bav

Регистрация: Oct 2010
Сообщений: 1,049
Отправить сообщение для bav с помощью ICQ
Если вы тестируете на локальной машине и запускаете флешку не через браузер, запроса к 843 порту не будет (насколько мне известно). Покажите код сервера раздающего crossdomain.xml.

Старый 06.05.2012, 04:04
KVinS вне форума Посмотреть профиль Отправить личное сообщение для KVinS Найти все сообщения от KVinS
  № 3  
Ответить с цитированием
KVinS

Регистрация: Nov 2009
Сообщений: 108
Код с урока на демиарте
Ничего военного
Код 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, время: 17:45.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 17:45.


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