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

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 05.10.2010, 17:27
ChuwY вне форума Посмотреть профиль Отправить личное сообщение для ChuwY Посетить домашнюю страницу ChuwY Найти все сообщения от ChuwY
  № 11  
Ответить с цитированием
ChuwY
 
Аватар для ChuwY

Регистрация: Nov 2009
Адрес: Тула / Москва
Сообщений: 734
Отправить сообщение для ChuwY с помощью ICQ Отправить сообщение для ChuwY с помощью Skype™
Могу посоветовать пойти таким же путём, каким пошел я =)
То есть написать собственный тестовый сервер на уже знакомом AS3 используя AIR 2.
(Должен быть flash cs 5)

Тогда все будет выглядеть примерно так:


На сервере :
Код AS3:
public class NetI extends  EventDispatcher{
  public static const policefile : XML = new XML('<?xml version="1.0"?><!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd"><cross-domain-policy><allow-access-from domain="*" to-ports= "*"/></cross-domain-policy>');
  const authPort          : uint = 843;
  const commPort        : uint = 2000;
  var connectedClients : Vector.<Socket>;
  var authSocket         : ServerSocket;
  var servMsgsSocket   : ServerSocket;	        
 
  public function NetI(){
    authSocket = new ServerSocket();	
    authSocket.bind(authPort);	
    servMsgsSocket.bind(commPort);       		
    authSocket.addEventListener(ServerSocketConnectEvent.CONNECT, authSocketConnectHandler);
    servMsgsSocket.addEventListener(ServerSocketConnectEvent.CONNECT, servMsgsSocketConnectHandler); 
  }
 
  public function start():void{
    try{
      authSocket.listen();	
      trace("Server started");
    } catch (error : Error){
      trace("Произлшла ошибка при открытии сокетов " + errror);
    }
  }
 
  private function authSocketConnectHandler(event : ServerSocketConnectEvent):void{
    var socket : Socket = event.socket as Socket;
    socket.addEventListener(ProgressEvent.SOCKET_DATA, authSocketDataHandler);
    trace("К порту передачи файла политик подключился (" + socket.remoteAddress + ":" + socket.remotePort + ")" );
  }
 
  private function authSocketDataHandler(event : ProgressEvent):void{
    var socket         : Socket;
    var message        : String;
    var bytesAvaliable : uint;
    var response       : String;
 
    socket = event.currentTarget as Socket;
    bytesAvaliable = socket.bytesAvailable;
    message = socket.readUTFBytes(bytesAvaliable);
 
    if(message == '<policy-file-request/>'){
      response = 	NetI.policefile;
      socket.writeUTFBytes(response);
      trace("Файл политики выдан (" + socket.remoteAddress + ":" + socket.remotePort + ")" );
      socket.flush();
      socket.close();
    }else{
      trace("Неверный запрос политики от (" + socket.remoteAddress + ":" + socket.remotePort + ") = " + message);
    }	
  }
 
  private function servMsgsSocketConnectHandler(event : ServerSocketConnectEvent):void{
    var socket : Socket;
    socket = event.socket as Socket;
 
    socket.addEventListener(Event.CLOSE, closeSocketHandler);
    socket.addEventListener(ProgressEvent.SOCKET_DATA,  msgSocketDataHandler);
 
    trace("К порту передачи сообщений подключился (" + socket.remoteAddress + ":" + socket.remotePort + ")" );
    connectedClients.push(socket);
  } 
 
  private function msgSocketDataHandler(event : ProgressEvent):void{
    // ну а здесь уже читаешь посланное клиентом сообщение с сокета
    // например таким же образом как мы читали полис файл реквест
  }
}
Насчет клиента отмечу то, что никаких дополнительных указаний местоположения файла политик не требуется, если его выдают на 843 порту (порт по-умолчанию для этих целей) или на том же порту, к которому идет подключение. (в данном случае 2000);
Если не хочется создавать два сокета, то можно сразу коннектиться клиентом к 2000 и выдавать там файл.


Последний раз редактировалось ChuwY; 05.10.2010 в 17:33.
Старый 05.10.2010, 18:35
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 12  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,600
Записей в блоге: 17
Цитата:
Сообщение от SunShadow Посмотреть сообщение
из-за недостатка знаний толком не понимаю что у меня не правильно. ткните носом слепого котенка, где рыть то?)
Успокойся, всё ок.
Когда флешка сомневается в безопасности, она кидает на сервер вот это:
<policy-file-request/>
и ждёт что сервер выплюнет ей содержание кроссдомейника. После этого флешка закрывает это соединение и тотчас поднимает новое, с которым уже работаешь ты. Для тебя это выглядит одной строчкой - socket.connect.

P.S. 843 порт лично для меня мифические цифры. За свою практику всегда работал с другими и всё было хорошо.

P.P.S. Ещё у меня когда host указывался доменом (типа vasya.ru) - флешка отказывалась коннектится. Всегда требовала ручного вбивания IP-адреса.

Старый 05.10.2010, 18:41
ChuwY вне форума Посмотреть профиль Отправить личное сообщение для ChuwY Посетить домашнюю страницу ChuwY Найти все сообщения от ChuwY
  № 13  
Ответить с цитированием
ChuwY
 
Аватар для ChuwY

Регистрация: Nov 2009
Адрес: Тула / Москва
Сообщений: 734
Отправить сообщение для ChuwY с помощью ICQ Отправить сообщение для ChuwY с помощью Skype™
Psycho Tiger, а 80 и 8080 порты для тебя тоже мифические цифры ? =)

И соединение, вроде как, лучше на сервере закрывать, ибо быстрее переконнект произойдет. Разве нет?

Старый 05.10.2010, 19:00
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 14  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,600
Записей в блоге: 17
ChuwY, мифические цифры значат что у меня и без них работает. Может плохо, но порты не мне выбирать. Я клиентщик - что будет "быстрее" я не знаю: весь этот обмен сертификатами происходит прозрачно для меня.

Старый 05.10.2010, 21:05
SunShadow вне форума Посмотреть профиль Отправить личное сообщение для SunShadow Найти все сообщения от SunShadow
  № 15  
Ответить с цитированием
SunShadow
 
Аватар для SunShadow

Регистрация: Apr 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 355
Спасибо всем за участие. Дома добрался до Мука, перечитал еще раз главу про безопасность, все по полочкам разложено как работать с сокетами. В очередной раз порадовался что не поскупился и купил книжку.
В принципе все что пробовал все должно работать, за одним маленьким требованием. Сервер при запросе из места отличного от домена и порта в котором запускается подключение к сокету, должен присылать файл разрешение от распространителя. Судя по всему тот самописный сокет, что мы собрали попросту этого не делает). Попрошу программиста внести требуемые модификации и буду надеяться что все заработает)
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ

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

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

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


 


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


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