Просмотр полной версии : Flash и XMLSocket
medesata
30.12.2005, 00:47
пытаюсь разобраться в "Flash и сокеты"
вот такой вот код срабатывается когда нажимаешь на одну из кнопочек:
on(press){
myXMLSocket=new XMLSocket();
myConnection=myXMLSocket.connect("whois.ripn.net",43);
myXMLSocket.onConnect=function(success){
if(success){trace("приконнектились к серверу");
if(myXMLSocket.send("mult.ru\r\n")!=""){trace ("посылаю данные на сервер");}
}
else{trace("не удалось присоединиться к серверу");}
}
myXMLSocket.onData=function(incoming){trace("сервер пересылает данные клиенту");}
myXMLSocket.onClose = function(){trace("отключились от сервера");}
}
и вот что выводится:
приконнектились к серверу
посылаю данные на сервер
отключились от сервера
______
не могу понять почему myXMLSocket.onData не срабатывает
TamKoffe
30.12.2005, 01:06
проверь может быть сервер не поссылает к конце строки нулевой байт!!!
medesata
01.01.2006, 20:03
мне кажется ripn.net выдаёт стандартный ответ, то есть с нулевым байтом на конце
написал им письмо, но они не ответили (деловые колбаски)
всё-таки мне кажется в чём-то другом причина
K.A.T.A.F.A.L.K.E.R
01.01.2006, 20:36
ты послал данные - коннект разорвался. Ты его не разрывал (ведь нет?) - значит, это сделали они. Обычно это делается в случае некорректных входящих данных. Ты уверен что посыдаешь то что надо? Я просто не в курсе что это за сервер...
K.A.T.A.F.A.L.K.E.R
01.01.2006, 20:44
Подожди... Порт 43? Точно? У меня к такому порту флеш даже не пытается коннектиться - сказано ж "TCP порт (должен быть 1024 или выше)"
medesata
04.01.2006, 23:52
прочитал HELP, но мне кажется это ограничение (>=1024) накладывается только на соединения с хостера, а с локального компьютера можно подключиться к любому порту
иначе почему Flash всё-таки коннектится к серверу?
K.A.T.A.F.A.L.K.E.R
05.01.2006, 01:30
иначе почему Flash всё-таки коннектится к серверу?
странно... у меня не коннектится :rolleyes:
medesata
06.01.2006, 10:53
может это и флуд, но неужели никто из огромной аудитории флешера не может дать мне ответ? Ведь коннектится флеш к 43 порту, ну по крайней мере событие onConnect срабатывает.
попробуй всетаки портец поменять, в нелпе явно сказано что порт должен быть больше 1024(именно не совет а утверждение "The port number must be 1024 or greater.")!!!!!, если коннктется, то не факт что будет нормально работать, типа недокументированная возможность
на самом деле можно использовать порты и ниже 1024, но для этого надо иметь возможность разместить на порте ниже 1024 свой сервер.
Затем загрузить сертификат безопасности при помощи loadPolicyFile().
в данном случае наверно имеет смысл использовать порт выше 1024.
loadPolicyFile() - незнал об это, спасибо за просвещение!!!
K.A.T.A.F.A.L.K.E.R
06.01.2006, 15:35
на самом деле можно использовать порты и ниже 1024, но для этого надо иметь возможность разместить на порте ниже 1024 свой сервер.
Затем загрузить сертификат безопасности при помощи loadPolicyFile().
в данном случае наверно имеет смысл использовать порт выше 1024.
Можно? Как? Я пробовал - дело даже не в том что не коннектится, он вообще ничего не делает! Ни тебе success ни его отсутствие... Ставишь, к примеру, 8080 - говорит, что не смог подключиться. Ставишь 43 - молчит :rolleyes:
Сам я делал это давно и только ради эксперемента,
вот нашёл чем я тогда руководствовался:
"Дмитрий Гурский для ПРОФЕССИОНАЛОВ ActionScript 2.0"
"17.1.5. Преодоление ограничений для сокетов
Flash-плейер дает возможность получать данные с сервера непосредственно по протоколу TCP, а
не по HTTP, как это обычно происходит в случае сайтов. Для этого со стороны клиента использу-
ется класс XMLSocket, а со стороны сервера — особые приложения, так называемые сокеты-
серверы. Подробно о сокетах поговорим ниже, а пока обсудим лишь ограничения, накладываемые
на них политикой безопасности Flash MX 2004.
Еще во Flash 5, когда появился класс XMLSocket, были запрещены подключения к портам с номе-
рами меньше 1024. Это было связано с необходимостью блокировать возможность атаки на порты
стандартных служб (они исторически имеют номера от 0 до 1024). Во Flash MX 2004 ограничения,
связанные с безопасностью, усилились. Теперь фильм может установить соединение с сокетом-
сервером на домене лишь в том случае, если он сам был получен с этого домена. Чтобы преодо-
леть это ограничение, нужно создать сертификат безопасности точно так же, как и в случае им-
порта данных по HTTP. Перед тем как установить соединение с соке-том на домене, плейер про-
верит наличие файла crossdomain.xml на 80 порту (т. е. запросит его у HTTP-сервера), Если он там
обнаружится и «родной» домен фильма окажется дружественным, то соединение будет создано.
Синтаксис сертификатов безопасности для сокетов точно такой же, как и для импорта данных по
HTTP. Единственное, нужно задать дополнительный атрибут to-ports тега <allow-access-from>, в
котором указывается, доступ к каким портам должен быть разрешен для фильмов домена, пропи-
санного в атрибуте domain. Указать в качестве допустимых несколько доменов можно, прописав
их номера через запятую. Чтобы задать интервал доменов, нужно использовать запись «beginend
», где begin — номер начинающего интервал домена, end —- номер домена, который завершает
интервал. Если значением атрибута to-ports сделать «*», то фильм сможет подключиться к любому
порту с номером больше 1024. По умолчанию нельзя разрешить доступ к порту с номером меньше
1024. Пример сертификата безопасности для сокета:
<?xml version="l.0"?>
<!DOCTYPE cross-domain-policy SYSTEM
"http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<allow-access-from domain="www.mysite.ru" to-ports="2020"/>
<allow-access-from domain="*.narod.ru" to-ports="1024-65535"/>
<allow-access-from domain="*" to-ports="1025,1026"/>
</cross-domain-policy>
Обычно фильм получает сертификат безопасности по HTTP. Это не всегда удобно. Например, до-
мен, на котором установлен сокет-сервер, может просто не иметь HTTP-сервера (он традиционно
занимает 80 порт). Устанавливать же сервер только из-за сертификата безопасности нерациональ-
но. Лучше запросить его непосредственно у сокета-сервера. Сделать это позволяет метод
loadPolicyFile() объекта System.security. В качестве параметра он принимает строку с URL, задан-
ную по следующей схеме: «xmlsockct://domain:port», где «xmlsocket://» — префикс, указывающий
на то, что сертификат должен быть получен не по HTTP; domain — имя домена, на котором распо-
лагается сервер; port — занимаемый сокетом-сервером порт.
Например:
var connection:XMLSocket=new XMLSocket();
System.security.loadPolicyFile("xmlsocket://www.mysite.ru:2045");
connection.connect("www.mysite.ru", 2045);
Отправлять сертификат безопасности может как тот же сервер, с которым должно быть установ-
лено соединение, так и любой другой, Настроить его нужно исходя из того, что плейер, запраши-
вая сертификат, посылает сообщение «<cross-domain-request/>», завершаемое нулевым байтом. В
ответ сервер должен отправить текст сертификата, завершив сообщение нулевым байтом. Получив
его, плейер разорвет соединение.
У метода loadPolicyFile() имеется огромное преимущество, которое заставляет обращаться к нему
даже тогда, когда на домене имеется HTTP-сервер. Загружая сертификат безопасности при помо-
щи loadPolicyFileO, можно разрешить доступ фильму к портам с номерами меньше 1024 (то есть к
портам стандартных служб). Для этого сам сертификат должен быть получен с порта с номером,
не превышающим 1024 (если вы смогли разместить на таком порте свой сервер, значит у вас дос-
таточно высокий административный доступ, чтобы позволить вашему фильму обращаться к стан-
дартным портам). Сертификат, загруженный с порта, номер которого больше 1024, или по HTTP,
не может дать допуск на подключение к стандартным портам.
До выхода Flash 7 для установки соединения со стандартным портом приходилось создавать на
сервере прокси-сцtнарий, который, получая данные от фильма, пересылал их на нужный порт."
Спасибо людям, умеющим объяснять:)
K.A.T.A.F.A.L.K.E.R
06.01.2006, 15:53
да уж, спасибо :) Поэкспериментирую как-нить... Когда припечет... :D
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.