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

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

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

Регистрация: May 2012
Сообщений: 24
По умолчанию Скоро повешусь с <policy-file-request/>

Пишу сервак на java. Поставил ServerSocket на 843 порту. Идет соединение и отправляется файл политики.

<?xml version="1.0"?>
<cross-domain-policy>
<allow-access-from domain="*" to-ports="*">
</cross-domain-policy>

с \u0000 на конце.

Но флеш не посылает нужные мне строки на сервер после принятия файла политики. Либо я передаю че-то не правильно... либо я передаю че-то не правильно! Помогите плиз.

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

Регистрация: Oct 2010
Сообщений: 1,049
Отправить сообщение для bav с помощью ICQ
Закрывает ли сервер соединение с клиентом после отправки ему политики?
Вот кроссдоменник:
Код:
<?xml version="1.0"?>
<cross-domain-policy>
    <allow-access-from domain="*" to-ports="*" meta-policy="master-only"/>
</cross-domain-policy>
Вот короткий скрипт на Python:
Код:
import socket

cross = open('crossdomain.xml').read()

HOST = ''
PORT = 843
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(32)
while 1:
	conn, addr = s.accept()
	data = conn.recv(24)
	print 'Connected by', addr, data
	if not data:
		conn.close()
	else:
		conn.sendall(cross)
		conn.close()

Старый 02.01.2014, 00:07
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 3  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Механизм должен быть такой: флеш коннектится, получает файл политики, соединение закрывается сервером. Это должно быть сделано обязательно! А дальше можно уже производить новый коннект на любой другой порт.
То есть сервер логичнее всего разбить на 2 части. Чисто часть которая занимается отправкой файлов политики, и часть которая обрабатывает все остальное.

Старый 03.01.2014, 23:24
MBoY4ik вне форума Посмотреть профиль Отправить личное сообщение для MBoY4ik Найти все сообщения от MBoY4ik
  № 4  
Ответить с цитированием
MBoY4ik

Регистрация: May 2012
Сообщений: 24
Цитата:
Сообщение от caseyryan Посмотреть сообщение
Механизм должен быть такой: флеш коннектится, получает файл политики, соединение закрывается сервером. Это должно быть сделано обязательно! А дальше можно уже производить новый коннект на любой другой порт.
То есть сервер логичнее всего разбить на 2 части. Чисто часть которая занимается отправкой файлов политики, и часть которая обрабатывает все остальное.
Я вроде-как все это сделал:
Код AS3:
import flash.system.Security;
import flash.net.Socket;
import flash.events.Event;
import flash.events.SecurityErrorEvent;
 
 
try
{
	Security.loadPolicyFile("xmlsocket://localhost:843");
	var socket:Socket = new Socket();
}catch(e:SecurityErrorEvent){
	txt.text = e.text;
}
socket.connect("localhost",8010);
socket.writeUTFBytes("ALL OK!!!");
Все ли я правильно сделал?

Если swf не залит на серв, то лог сервера такой:

8010: CONNECT
DATA: ALL OK!!!
8010: DISCONNECTED BY SERVER

а если залит, то такой:

843: CONNECT
843: NEED POLICY FILE
843: DISCONNECTED BY SERVER
8010: CONNECT

ошибку не выдает
не понимаю я этого адобовского юмора security

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

Регистрация: Oct 2010
Сообщений: 1,049
Отправить сообщение для bav с помощью ICQ
Если у вас на 843 порту сервера висит и слушает секьюрный скрипт, вроде того, что я привел, то достаточно на клиенте выполнить следующее:
Код AS3:
// Создаем сокет
_socket = new Socket();
// Определяем порядок байт
_socket.endian = Endian.LITTLE_ENDIAN;
// Добавляем прослушку события подключения. Только после наступления
// этого события можно слать/принимать данные.
_socket.addEventListener(Event.CONNECT, connectHandler);
// Добавляем прослушку прочих событий.
_socket.addEventListener(Event.CLOSE, closeHandler);
_socket.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
_socket.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
_socket.addEventListener(ProgressEvent.SOCKET_DATA, socketDataHandler);
 
// Начинаем установку соединения. Здесь _port - это не 843, а уже целевой
// порт сервера (например, 8010, в вашем случае).
_socket.connect(_host, _port);
 
// Функция connectHandler выглядит примерно так:
function connectHandler(e:Event):void 
{
	// Здесь просто вывод сообщения о том, что соединение установлено.
	Debug.out("Connection established.");
}
То есть, как видите, вызов Security.loadPolicyFile("xmlsocket://localhost:843") не нужен. Честно признаться, я не знаю зачем он нужен, кто знает расскажет. После вызова метода _socket.connect Flash Player самостоятельно постучится на 843 порт и спросит файл политик. Удовлетворившись, он уже подключится на целевой порт, и после удачной установки соединения бросит событие Event.CONNECT, которое мы как раз и слушаем.

Старый 05.01.2014, 23:21
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 6  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
loadPolicyFile не приводит к немедленной загрузке файла политик из альтернативного источника. Это указание на дополнительное действие "возьми-ка политики не только с 843 порта, а еще и тут до кучи, когда будешь коннектиться к серверу".
В этом контексте Security.loadPolicyFile("xmlsocket://localhost:843"); - бессмысленный код (да еще и в try-catch).
Более того, видимо, вредный : после возможно успешного дефолтного запроса на 843 порт, сервер закрывает коннект, а плеер, согласно указанию в коде, опять туда стучится, но таймаутов тут уже нет и клиент успешно засыпает в ожидании "дополнительных" политик. Шутка, но в каждой шутке есть доля сами знаете чего.
Протестите сервер на предмет отдачи политик и уберите loadPolicyFile, воспользуйтесь примером bav'a создания коннекта с подпиской на события. И да, самостоятельный демон-скрипт, которые спокойно слушает 843 порт, раздает политики, и позволяет не забивать себе голову этим "юмором" - тоже отличная идея.
_________

И еще, эмоции эмоциями, но вот ругань в заголовке темы, равно как и в постах, крайне не приветствуется.

Старый 11.01.2014, 20:33
maxkar вне форума Посмотреть профиль Отправить личное сообщение для maxkar Найти все сообщения от maxkar
  № 7  
Ответить с цитированием
maxkar

Регистрация: Nov 2010
Сообщений: 497
Цитата:
Сообщение от MBoY4ik Посмотреть сообщение
Я вроде-как все это сделал:
Код AS3:
socket.connect("localhost",8010);
socket.writeUTFBytes("ALL OK!!!");
Так нельзя. Оно не будет работать. Во второй строке будет исключение IOError, так как соединение устанавливается асинхронно. Вы должны ловить событие Event.CONNECT и уже там отправлять ваши данные. В качестве основы можно взять код от bav.

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

Создать новую тему Ответ Часовой пояс GMT +4, время: 13:35.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

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

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


 


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


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