Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Политики в файле crossdomain.xml для сокетов, Проблемы с политиками=( 
V
    Опции темы
idti
Дата 28.2.2009, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 139
Регистрация: 28.2.2009
Где: pnz

Репутация: нет
Всего: нет



Сервер на java 6. Клиентские приложения flash. Адоб флеш плеер 10 требует файл политики для подключения по сокетам. На запрос <policy-file-request/> такого файла политики, передаю собственно ему прямо из серверного приложения    "<cross-domain-policy><allow-access-from domain=\"*\" secure=\"true\" to-ports=\"*\"/></cross-domain-policy>\0", но что то не так делаю, так как не работает( 

Код

import java.io.*;
import java.net.*;
class SimpleServer
{
    private static SimpleServer server;
    ServerSocket socket;
    Socket incoming;
    BufferedReader readerIn;
    PrintStream printOut;
    public static void main(String[] args)
    {
        int port = 8080;
        try
        {
            port = Integer.parseInt(args[0]);
        }
        catch (ArrayIndexOutOfBoundsException e)
        {
            // Catch exception and keep going.
        }
        server = new SimpleServer(port);
    }
    private SimpleServer(int port)
    {
        System.out.println(">> Starting SimpleServer");
        try
        {
            socket = new ServerSocket(port);
            incoming = socket.accept();
            readerIn = new BufferedReader(new InputStreamReader(incoming.getInputStream()));
            printOut = new PrintStream(incoming.getOutputStream());
            out("Enter EXIT to exit.\r");
            boolean done = false;
            while (!done)
            {
                String str = readerIn.readLine();
                if (str == null)
                {
                    done = true;
                }
                else
                {
                    out("Echo: " + str + "\n");
                    if(str.trim().equals("EXIT"))
                    {
                        done = true;
                    } else if (str.trim().equals("<policy-file-request/>")) {
                        printOut.println("<cross-domain-policy><allow-access-from domain=\"*\" secure=\"true\" to-ports=\"*\"/></cross-domain-policy>0\");
                        out("<cross-domain-policy><allow-access-from domain=\"*\" secure=\"true\" to-ports=\"*\"/></cross-domain-policy>\0");
                        incoming.close();
                    }
                }
            }
            incoming.close();
        }
        catch (Exception e)
        {
            System.out.println(e);
        }
    }
    private void out(String str)
    {
        //printOut.println(str);
        System.out.println(str);
    }
}



Это сообщение отредактировал(а) idti - 28.2.2009, 16:50
PM MAIL   Вверх
Kangaroo
Дата 28.2.2009, 23:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


Профиль
Группа: Участник Клуба
Сообщений: 2042
Регистрация: 7.10.2006
Где: US

Репутация: 2
Всего: 104



Цитата(idti @  28.2.2009,  15:29 Найти цитируемый пост)
Адоб флеш плеер 10

пишет что ему не нравится? Куда-нибудь в логи?


--------------------
Lost....
PM MAIL MSN   Вверх
idti
Дата 1.3.2009, 09:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 139
Регистрация: 28.2.2009
Где: pnz

Репутация: нет
Всего: нет



Вот лог дебагера Адоб, в самом флеш 10 только последний абзац вылетает:

Attemping to launch and connect to Player using URL E:\_FLASH\projects\net\net.swf
[SWF] E:\_FLASH\projects\net\net.swf - 2202 bytes after decompression
Предупреждение: На xmlsocket://192.168.20.37:8080 истекло время (3 сек) ожидания файла политики для сокета.  Это не должно привести к каким-либо проблемам, однако см. описание на веб-сайте http://www.adobe.com/go/strict_policy_files_ru.


*** Нарушение безопасности изолированной среды ***
Подключение к 192.168.20.37:8080 прервано – нет разрешения от file:///E|/%5FFLASH/projects/net/net.swf
Ошибка: Запрос ресурса на xmlsocket://192.168.20.37:8080 источника запроса из file:///E|/%5FFLASH/projects/net/net.swf отклонен из-за отсутствия разрешений в файле политики.


Error #2044: Необработанный securityError:. text=Error #2048: Нарушение изолированной среды: file:///E|/%5FFLASH/projects/net/net.swf не может загрузить данные из 192.168.20.37:8080.
    at net()[E:\_FLASH\projects\net\net.as:9]

А это вот java сервер:

>> Starting SimpleServer
Enter EXIT to exit.

Echo: <policy-file-request/>

<cross-domain-policy><allow-access-from domain="*" secure="true" to-ports="8080"/></cross-domain-policy>
PM MAIL   Вверх
Kangaroo
Дата 1.3.2009, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


Профиль
Группа: Участник Клуба
Сообщений: 2042
Регистрация: 7.10.2006
Где: US

Репутация: 2
Всего: 104



Цитата(idti @  28.2.2009,  15:29 Найти цитируемый пост)
printOut.println("<cross-domain-policy><allow-access-from domain=\"*\" secure=\"true\" to-ports=\"*\"/></cross-domain-policy>0\");
                        out("<cross-domain-policy><allow-access-from domain=\"*\" secure=\"true\" to-ports=\"*\"/></cross-domain-policy>\0");

Что с ноликом последним? Как правильно?

Это сообщение отредактировал(а) Kangaroo - 1.3.2009, 12:43


--------------------
Lost....
PM MAIL MSN   Вверх
idti
Дата 1.3.2009, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 139
Регистрация: 28.2.2009
Где: pnz

Репутация: нет
Всего: нет



А как правильно? Вроде вот так '\0' А здесь в коде '0\' это просто опечатался здесь, так бы не оттранслировалось)
PM MAIL   Вверх
Kangaroo
Дата 2.3.2009, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


Профиль
Группа: Участник Клуба
Сообщений: 2042
Регистрация: 7.10.2006
Где: US

Репутация: 2
Всего: 104



Попробуй:
1. Сделать printOut.flush() после println()
2. Поменять PrintStream на PrintWriter


--------------------
Lost....
PM MAIL MSN   Вверх
idti
Дата 2.3.2009, 22:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 139
Регистрация: 28.2.2009
Где: pnz

Репутация: нет
Всего: нет



Цитата(Kangaroo @  2.3.2009,  13:01 Найти цитируемый пост)
Попробуй:1. Сделать printOut.flush() после println()2. Поменять PrintStream на PrintWriter

Попробовал, тоже самое получается. Посмотрел тисипи - дамп, там видно как флеш ломится с запросом а сервер ему отвечает, но уже ровно через 3 сек. 
PM MAIL   Вверх
idti
Дата 3.3.2009, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 139
Регистрация: 28.2.2009
Где: pnz

Репутация: нет
Всего: нет



А я сделал) У меня получилось!
PM MAIL   Вверх
idti
Дата 3.3.2009, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 139
Регистрация: 28.2.2009
Где: pnz

Репутация: нет
Всего: нет



Косяк наверно был в readerIn.readLine() который ждал конца строки, но не факт (я не уверен, проверять ну буду). Я переписал как посимвольное считывание, read() короче. И write заменил опять на stream (откатил совет, так сказать). И вот тогда адоб начал писать что не может найти требуемого разрешения в файле политики, т.е. надпись о прошествии 3 сек пропала! Выходом стал убранный тег secure = "true" в коде файла политики)  Тисипи дамп рулит! Только вот что делать дальше с этим сокетом не понятно, разрывать соединение или не разрывать, адоб сам его разрывает или не совсем, но факт что связь пока не работает=(

Цитата

Выполнена загрузка SWF-файла корневого уровня: file:///E|/%5FFLASH/projects/net/net.swf
ОК: Выполняется поиск директив <allow-access-from> в файлах политики, чтобы авторизовать загрузку данных из ресурса по адресу xmlsocket://192.168.20.37:8080 инициатором запроса из file:///E|/%5FFLASH/projects/net/net.swf
ОК: Файл политики принят: xmlsocket://192.168.20.37:8080
ОК: Запрос ресурса на xmlsocket://192.168.20.37:8080 источника запроса из file:///E|/%5FFLASH/projects/net/net.swf разрешен согласно файлу политики на xmlsocket://192.168.20.37:8080


Код

import java.io.*;
import java.net.*;
class SimpleServer
{
    private static SimpleServer server;
    ServerSocket socket;
    Socket incoming;
    BufferedReader readerIn;
    PrintStream printOut;
    public static void main(String[] args)
    {
        int port = 8080;
        try
        {
            port = Integer.parseInt(args[0]);
        }
        catch (ArrayIndexOutOfBoundsException e)
        {
            // Catch exception and keep going.
        }
        server = new SimpleServer(port);
    }
    private SimpleServer(int port)
    {
        System.out.println(">> Starting SimpleServer");
        try
        {
            socket = new ServerSocket(port);
            incoming = socket.accept();
            readerIn = new BufferedReader(new InputStreamReader(incoming.getInputStream()));
            printOut = new PrintStream(incoming.getOutputStream());
            out("Enter EXIT to exit.\r");
            boolean done = false;
            while (!done)
            {
                //String str = readerIn.readLine();
                String StrRequest = "";
                for (;;) {
                    if (StrRequest.compareTo("<policy-file-request/>\0") != 0) {
                        char BackChar = (char) readerIn.read();
                        StrRequest += BackChar;
                        /*if (StrRequest.length() <= 23 )*/ out(StrRequest);
                        if (StrRequest == null) {
                            done = true;
                            break;
                        }
                    } else {
                        String str1;
                        str1 = "";
                        str1 += "<cross-domain-policy>";
                        str1 += "<allow-access-from domain=\"*\" to-ports=\"*\"/>";
                        str1 += "<allow-access-from domain=\"192.168.20.37\" secure=\"true\" to-ports=\"*\"/>";
                        str1 += "</cross-domain-policy>\0";
                        printOut.print(str1);
                        //printOut.flush();
                        out(str1);
                        done = true;
                        break;
                    }
                }
            }
            String StrIn = "";
            printOut.print("Hello!\n");
            for(;;) {
                char InChar = (char) readerIn.read();
                StrIn += InChar;
                if (StrIn.length() <= 23 ) out(StrIn);
                if (StrIn == null) {
                    incoming.close();
                    incoming = socket.accept();
                }
            }
            //readerIn = new BufferedReader(new InputStreamReader(incoming.getInputStream()));
            //printOut = new PrintStream(incoming.getOutputStream());
            //out("Enter EXIT to exit.\r");
            //String str = readerIn.readLine();
            //out(str);
        }
        catch (Exception e)
        {
            System.out.println(e);
        }
    }
    private void out(String str)
    {
        //printOut.println(str);
        System.out.println(str);
    }
}


PM MAIL   Вверх
idti
Дата 4.3.2009, 19:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 139
Регистрация: 28.2.2009
Где: pnz

Репутация: нет
Всего: нет



Java раздает crossdomain на 843 порту =) очень удобно =)

Код

import java.io.*;
import java.net.*;
class cross843 {
    private static cross843 server;
    ServerSocket socket;
    Socket incoming;
    BufferedReader readerIn;
    PrintStream printOut;
    
    public static void main(String[] args) {
        int port = 843;
        try    {
            port = Integer.parseInt(args[0]);
        } catch (ArrayIndexOutOfBoundsException e) {
            // Catch exception and keep going.
        }
        server = new cross843(port);
    }
    
    private cross843(int port) {
        out(">> Starting cross843");
        for (;;) {
            try    {
                socket = new ServerSocket(port);
                incoming = socket.accept();
                readerIn = new BufferedReader(new InputStreamReader(incoming.getInputStream()));
                printOut = new PrintStream(incoming.getOutputStream());
                out("Enter EXIT to exit.\r");
                boolean done = false;
                while (!done) {
                    //String str = readerIn.readLine();
                    String StrRequest = "";
                    for (;;) {
                        if (StrRequest.compareTo("<policy-file-request/>\0") != 0) {
                            char BackChar = (char) readerIn.read();
                            StrRequest += BackChar;
                            /*if (StrRequest.length() <= 23 )*/ out(StrRequest);
                            if (StrRequest == null) {
                                done = true;
                                break;
                            }
                        } else {
                            String str1;
                            str1 = "";
                            str1 += "<cross-domain-policy>";
                            str1 += "<allow-access-from domain=\"*\" to-ports=\"*\"/>";
                            str1 += "</cross-domain-policy>\0";
                            printOut.print(str1);
                            //printOut.flush();
                            out(str1);
                            done = true;
                            break;
                        }
                    }
                }
                incoming.close();
                socket.close();
            }
            catch (Exception e)
            {
                System.out.println(e);
            }
        }
    }
    
    private void out(String str)
    {
        System.out.println(str);
    }
}


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Работа с сетью | Следующая тема »


 




[ Время генерации скрипта: 0.0614 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.