Гибкие сокеты ActionScript и Telnet

Я пытаюсь создать гибкое приложение, которое получает данные из telnet-соединения, и у меня возникает странная проблема.

Чтобы дать краткое введение, я хочу прочитать данные из процесса, который предоставляет их через сокет. Итак, если в оболочке я набираю telnet localhost 8651i, получаю xml, а затем соединение закрывается (я получаю следующее Connection closed by foreign host.)

В любом случае я нашел в Интернете простой учебник для flex, который по сути является клиентом Telnet, и можно было бы ожидать, что он будет работать, но все следует законам Мерфи, и ничего не работает!

Теперь у меня есть сообщения, которые печатаются в каждом обработчике событий и во всех местах, о которых я могу думать. Когда я подключаюсь к сокету, ничего не происходит, обработчик событий не запускается, даже обработчик подключения или закрытия, и если я сделаю следующее, socket.connected вернет false! Я не получаю ошибок, попытка catch не вызывает исключения. Я не понимаю, что идет не так?

        socket.connect(serverURL, portNumber);
        msg(socket.connected.toString());

Есть ли что-то о telnet, чего я не знаю, и из-за чего это не работает? Что еще интереснее, так это то, почему ни одно мероприятие не было уволено.

Еще одна интересная вещь заключается в том, что у меня есть код Python, который делает то же самое и может вернуть xml!

Ниже приведен код Python, который работает!

  def getStats(host, port):
 sock = socket.socket()
 sock.connect((host, port))
 res = sock.recv(1024*1024*1024, socket.MSG_WAITALL)
 sock.close()
 return statFunc(res)

Так что я спрашиваю, что не так !!!!!! Есть ли какая-то неотъемлемая проблема с тем, как flex обрабатывает сокеты?


person MAC    schedule 07.02.2010    source источник
comment
Хорошо, я понял кое-что, что меня подтолкнуло, но все еще не решает проблему! Я установил -use-network = false при компиляции. Это заставляет меня двигаться вперед. Итак, теперь я получаю исключение, когда пытаюсь подключиться к розетке. Номер ошибки - 2010, я погуглил и обнаружил, что это связано с междоменными политиками. Теперь проблема в том, что файл находится на моем локальном жестком диске. Я даже не использую веб-сервер. Итак, где мне разместить файл crossdomain.xml и что именно я должен в него вставить.   -  person MAC    schedule 07.02.2010
comment
Сейчас он у меня в том же каталоге, что и swf-файл, и его содержимое выглядит следующим образом. Однако он все еще не работает. ‹? Xml version = 1.0?› ‹! DOCTYPE cross-domain-policy SYSTEM macromedia.com/xml/dtds/cross-domain-policy.dtd ›‹cross-domain-policy›‹ allow-access-from domain = localhost / ›‹/cross-domain-policy›   -  person MAC    schedule 07.02.2010


Ответы (2)


В какой песочнице безопасности вы это запускаете? если вы запускаете это как флэш-приложение, встроенное в веб-страницу, то это, скорее всего, нарушение безопасности.

Метод XMLSocket.connect () может подключаться только к компьютерам в том же домене, где находится SWF-файл. Это ограничение не распространяется на SWF-файлы, запущенные с локального диска. (Это ограничение идентично правилам безопасности для URLLoader.load ().) Чтобы подключиться к демону сервера, работающему в домене, отличном от того, где находится SWF, вы можете создать файл политики безопасности на сервере, который разрешает доступ из конкретные домены.

person srossross    schedule 07.02.2010
comment
ну на данный момент все на одной машине. И я не использую XMLSocket, а сокет Socket. Что касается песочницы безопасности, я не уверен. это моя первая попытка сгибания. Даже если бы это было проблемой безопасности, разве я не должен получать какие-то ошибки или исключения? - person MAC; 07.02.2010
comment
Что ж, я мог бы сделать файл междоменной политики, но я не уверен, куда его поместить. Как я уже сказал, все на жестком диске. - person MAC; 07.02.2010

По соображениям безопасности хост, к которому вы подключаетесь, должен обслуживать запросы политики Flash-сокетов на порту 943 (или на том же порту, на котором вы пытаетесь установить соединение). На этой странице показано, как настроить это на сервере, к которому вы пытаетесь подключиться:

http://www.adobe.com/devnet/flashplayer/articles/socket_policy_files.html

Во время разработки часто бывает удобно добавить SWF-файл в список файлов, запускаемых в безопасной песочнице, чтобы избавиться от необходимости обслуживать файл политики сокетов.

http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager04.html

person John McCann    schedule 16.02.2010