|
Модераторы: SoWa |
|
yogin |
|
||||||||||||
Шустрый Профиль Группа: Участник Сообщений: 88 Регистрация: 23.12.2007 Репутация: нет Всего: нет |
Приветствую!
Пишу Delphi сервер - Flash клиент. Долго парился с файлом политик... В результате, при подключении флешки от так:
На сервер сразу идёт строка:
Я её принимаю, и в ответ посылаю следующую строку(файл политик):
При таком раскладе мне наконец-то удалось избежать всяких ошибок на стороне флешки по поводу недопустимости файла политик и всякого такого... И после этого соединение у флешки сохраняется, выводится trace "sock connected". Вроде всё корошо, как бы общайся дальше данными. Но, взглянем в лог сервера: [02:49:15]: +++ Сервер запущен +++ [02:50:15]: from 127.0.0.1:51105: Соединение установлено! [02:50:15]: from 127.0.0.1:51105: принят <policy-file-request/> [02:50:15]: from 127.0.0.1:51105: Клиент закрыл соединение(закрыт сокет) [02:50:15]: from 127.0.0.1:51105: Нить остановлена [02:50:15]: from 127.0.0.1:51107: Соединение установлено! ... Т.е. флэш клиент, после того как получил файл политик, разрывает соединение и устанавливает его заново! А чуть позже я увидел пост о том, что можно держать сервер, который раздаёт только файлы политик и больше ничего, вообще отдельно от основного сервера, но как тогда посылать запрос файла политик, ведь тут я просто конектюсь к основному серверу, а флешка уже сама запрашивает у этого адреса файл политик. нужно воспользоваться Security.loadPolicyFile() ? тогда что правильно писать в скобках, т.е. как правильно писать адрес сервера для такого сокет сервера как у меня? а то примеры котоыре я видел в основном для веб севреров или ещё чего-то... Теперь идём дальше, допустим что я наладил первое подключение по вышежелаемой схеме. Теперь, какими данными общаться с основным сервером? У меня такое мнение слаживается, что общаться прийдётся строками, которые заканчиваются на нулевой байт... Т.е. я опять же видел упоминание этого на каком-то форуме, что: "флеш отправляя строку серверу, всегда в конец добавляет нулевой байт" - типа этот байт служит нам флагом для разделения пакетов на сервере. и далее: "так же и серверу необходимо отсылать строки, добавляя в конец нулевой байт" - типа флешка так тоже автоматом распознает отдельные пакеты и выдаст их в функцию обработки события ProgressEvent.SOCKET_DATA. Но во всех сетевых приложениях, которые я разрабатывал до этого, я общался следующей структурой:
Т.е. когда подключается клиент, то анализатор буфера сокета заранее знает, что первым будет заголовок, потом в заговке он читает размер тела пакета и после приёма байт тела опять переключается на чтение заголовка(следующего пакета) и т.д. А с флешем получается только строки можно передавать чтоли? Конечно я могу адаптировать посылку и приём для строк, в этом случае разделителями пакетов будут нулевые байты, но мне бы всётаки хотелось формировать байтовые пакеты и посылать их как массивы байт, какими я и пользовался... Ещё интересует отличие типа socket и XMLSocket во флеше... в чём разница, когда тот или другой применяется или может применяться? я, например, использую:
А т.к. конечная цель - это рпиложение для вконя(вконтакте), то заодно спрошу, какую строку политики надо использовать для него? Вот такую?:
Вот вообщем хочется подробно, последовательно обсудить данную архитектуру, а то как-то уже запарило лазить по всему инету и анализировать всякие клочки информации. Ах да, подскажите ещё, какую книгу взять, где бы по сокетам(в AS3) добротно было расписано(чтоб не только про то, как с WEB серверам связываться)? Очень надеюсь на помощь |
||||||||||||
|
|||||||||||||
Simplifier |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 18.7.2011 Репутация: нет Всего: нет |
Ну да, loadPolicyFile должен помочь. В справку загляни (http://help.adobe.com/ru_RU/FlashPlatform/...oadPolicyFile()) - там все описано. Ничего особенного в твоем сервер-сокете вроде нет, загружаешь кроссдомен, как в справке сделано:
С чего ты взял? Опять же, в хелпе все написано: http://help.adobe.com/ru_RU/FlashPlatform/...net/Socket.html . Там до фига чего передавать можно и в каком хочешь виде: и всяко-разные строки, и числа, и байты, и сериализованные объекты.
http://help.adobe.com/ru_RU/FlashPlatform/.../XMLSocket.html . Вот XMLSocket (не зря он так называется) как раз, в отличие от Socket специально предназначен для обмена текстовыми данными. Если что, деректива <allow-http-request-headers-from domain="*.vk.com" headers="*"/> шире чем <allow-http-request-headers-from domain="vk.com" headers="*"/>, поэтому половину строк можно безболезненно удалить. Вот спецификация кроссдомена: http://learn.adobe.com/wiki/download/attac...ecification.pdf Не слишком подробно, но довольно внятно работа с сокетами описана в книжке ActionScript 3 Сборник рецептов Это сообщение отредактировал(а) Simplifier - 26.3.2012, 18:04 |
||||||
|
|||||||
yogin |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 88 Регистрация: 23.12.2007 Репутация: нет Всего: нет |
О наконец-то по кроссдоменам что-то внятное и подробное, благодарствую за PDF'ку и наводку на книжку.
|
|||
|
||||
Simplifier |
|
|||
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 18.7.2011 Репутация: нет Всего: нет |
=)
|
|||
|
||||
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | ActionScript 3 | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |