Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Проблема с policy file request (http://www.flasher.ru/forum/showthread.php?t=198597)

Ralph_DiMarko 30.04.2013 11:16

Проблема с policy file request
 
Всем привет.
Меня эта проблема не обошла стороной, есть самописный сервер на java, во флеше соединяюсь через класс Socket, локально все хорошо. Выложил в сеть флешку и началось..
Как и положено флешка соединяется и первый запрос "<policy-file-request/>", затем отключается и больше не подключается.
Смотрю через снифер, флешка каждый раз по разным портам запрашивает политику, сервер по тому же порту и отвечает, на этом все заканчивается.
Как увидеть что зашло во флеш, как вообще удостовериться что флешка получила мой ответ?
За два дня перепробовал все варианты политики, и с преходами после строк и в конце "\n", и с байтами в конце '\0'.
Код:

<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">
<site-control permitted-cross-domain-policies="master-only"/>
<cross-domain-policy>
<allow-access-from domain="*" to-ports="*" />
</cross-domain-policy>

Повторюсь что данные флешу шлются, и флешка обрывает соединение, но снова не подключается, я так понимаю что не нравится политика, как проснифить флешку что в нее вошло? Или может есть какие то другие причины. Подскажите, помогите пожалуйста.

Korchy 30.04.2013 11:31

Как один из вариантов проверить не закрыт ли фаерволом порт, по кторому пытается соединиться флешка.

Ralph_DiMarko 30.04.2013 12:09

Цитата:

Сообщение от Korchy (Сообщение 1131754)
Как один из вариантов проверить не закрыт ли фаерволом порт, по кторому пытается соединиться флешка.

Мне кажется если бы порт был закрыт, тогда в снифере не отображались бы запросы, а в снифере четко видны запросы на сервер и от сервера обратно по тому же порту.

caseyryan 30.04.2013 12:42

Может во флешке отписка от событий происходит? Надо код соединения самой флешки смотреть. Если сниффер видит, по идее и сама флешка должна видить. Или кидать секьюрити эррор

Ralph_DiMarko 30.04.2013 12:46

Цитата:

Сообщение от caseyryan (Сообщение 1131758)
Может во флешке отписка от событий происходит? Надо код соединения самой флешки смотреть. Если сниффер видит, по идее и сама флешка должна видить. Или кидать секьюрити эррор

Извините провтыкал не уточнил, выкидывает security error, причем спустя секунд 5 после того как на сервере отключилось.

----------------
А вообще может есть какие то сервисы для проверки всего этого дела? Может флешка которая на 100% рабочая и коннектится или сервер который 100% рабочий и отвечает как положено?

-De- 30.04.2013 14:55

Вложений: 1
XML какой-то стрёмный. По-моему в нём проблема. Есть куча и сокет серверов для проверки, вот, например
http://www.flasher.ru/forum/blog.php?b=275
мой 100% рабочий (если за 3 года не перестал) полиси сервер отдавал такой xml
Код AS1/AS2:

const char *policy = "<cross-domain-policy>\
        <site-control permitted-cross-domain-policies=\"master-only\"/>\
  <allow-access-from domain=\"*\" to-ports=\"*\" />\
</cross-domain-policy>";

Исходники сокет сервера прикрепил, если что. Они страдают тем, что не отрубают по таймауту тех, кто законнектился и просто висит.

Ralph_DiMarko 30.04.2013 15:50

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

-----------------------
Оказывается у моего провайдера стоит или висит NAT (как я понял это преобразователь адресов и портов). Подозреваю что проблема из за этого, а еще смотрю в настройках моего сетевого подключения присвоен один ип, а на сервисах определяющих ип определяется совсем другой ип. Мутно как то, запросил нормальный внешний ип.

-----------------------
01.05.2013 01:47
Скачал пример сервера от Котяры по ссылке которую любезно предоставил -De-. У него отдельно идет сервер для раздачи политики и отдельно основной. Решил попробовать так же, и знаете что заработало.
Написал отдельный сервер который слушает клиентов на отдельном порту, который лежит на том же хосте что и основной сервер.

Код:

package policyserver;

import java.io.IOException;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;

public class PolicyServer
{
    public static void main(String[] args)
    {
        PolicyServer policy = new PolicyServer();
        policy.run();
    }
   
    public void run()
    {
        try
        {
            ServerSocket server = new ServerSocket(55553);
            while(true)
            {
                try
                {
                    Socket s = server.accept();
                    PrintWriter out = new PrintWriter(s.getOutputStream(), true);
                    out.println("<cross-domain-policy><allow-access-from domain=\"*\" to-ports=\"*\" /></cross-domain-policy>\0");
                    System.out.println("sent");
                    out.close();
                    s.close();
                }
                catch(IOException e)
                {
                   
                }
            }
        }
        catch (IOException ex)
        {
            Logger.getLogger(PolicyServer.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

А во флеше указал
Код:

Security.loadPolicyFile("xmlsocket://ip:55553");
Только вот думаю это я сделал такой костыль что два сервера или это нормально, вобщем поживем увидим во что выльется такой метод раздачи.
Еще раз спасибо всем кто комментировал.

caseyryan 01.05.2013 10:03

Цитата:

Сообщение от -De- (Сообщение 1131766)
XML какой-то стрёмный. По-моему в нём проблема. Есть куча и сокет серверов для проверки, вот, например
http://www.flasher.ru/forum/blog.php?b=275
мой 100% рабочий (если за 3 года не перестал) полиси сервер отдавал такой xml
Код AS1/AS2:

const char *policy = "<cross-domain-policy>\
        <site-control permitted-cross-domain-policies=\"master-only\"/>\
  <allow-access-from domain=\"*\" to-ports=\"*\" />\
</cross-domain-policy>";

Исходники сокет сервера прикрепил, если что. Они страдают тем, что не отрубают по таймауту тех, кто законнектился и просто висит.

Вариант по-лучше, просто положить в какую-то директорию реальный xml файл политик, а сервак при старте или по команде будет его подгружать и записывать в переменную, ну и, естественно, отдавать клиентам по запросу. Так не будет возможных проблем с экранированием, и можно будет легко изменить сам файл, не перекомпилируя сервер.

У меня сервак вот так читает файл политик
Код AS3:

public static String readPolicy() {
                try {
                        String policyXML        = readFile(
                                        new File(FGSMain.SETTINGS_DIR + "crossdomain.xml").getAbsoluteFile());
                        return policyXML;
                } catch (IOException e) {}
                return null;
        }
private static String readFile(File file) throws IOException {
                FileInputStream stream = new FileInputStream(file);
                try {
                        FileChannel fc = stream.getChannel();
                        MappedByteBuffer bb = fc.map(FileChannel.MapMode.READ_ONLY, 0,
                                        fc.size());
                        return Charset.defaultCharset().decode(bb).toString();
                } finally {
                        stream.close();
                }
        }



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

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