Actionscript Socket Events не запускается? - PullRequest
1 голос
/ 18 сентября 2011

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

На стороне Java я настроил ServerSocket , который прослушивает порт 8080. Используя netcat, я подтвердил, что он работает как задумано.

Однако на стороне Flash я настраиваю в соответствии с примерами в документах:

public function connectToPort(port : int):void
{   
    m_socket = new Socket();

    addEventListener(Event.CLOSE, onClose);
    addEventListener(Event.CONNECT, onConnect);
    addEventListener(IOErrorEvent.IO_ERROR, onIoError);
    addEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurityError);
    addEventListener(ProgressEvent.SOCKET_DATA, onData);

    m_socket.connect("localhost", port);

    // trace() doens't work for the command-line :(
    m_debug.text = "Called connect!";
}

Когда я запускаю полученный SWF, все, что я получаю, это "Called connect!"на сцене, и ни одно из событий никогда не запускает .Еще более странно, что когда я исследую связь с ServerSocket на стороне Java, он получает и принимает соединение.Когда я закрываю SWF, код, вызывающий мой Сервер, завершается как обычно, то есть он зависает на соединении, выполненном с моим SWF.

У меня осталось несколько вопросов ...

  • За исключением обработчиков событий, это конец контроля для моего кода (после того, как соединение установлено, мы просто ждем события и отображаем их соответствующим образом).Может ли вся программа «завершаться», и я просто неправильно понял модель Runtime?
  • Существуют ли требования к видимости / именованию для обратных вызовов, которые они должны вызывать?Все они общедоступны, но может ли быть, что среда выполнения их не видит?
  • Есть ли какие-то ошибки с программированием сокетов AS3?Я продолжал думать, что это была проблема с песочницей и т. Д., Но SECURITY_ERROR также не срабатывал ...

Любая помощь будет принята с благодарностью, я потратил большую часть своего дня на это иЯ очень разочарован тем, что не могу заставить работать базовую связь через сокет: - /

Ответы [ 2 ]

2 голосов
/ 18 сентября 2011

Похоже, вы добавляете прослушиватели событий к объекту "this", а не к сокету.

попробуйте это:

m_socket.addEventListener(Event.CLOSE, onClose);
m_socket.addEventListener(Event.CONNECT, onConnect);
m_socket.addEventListener(IOErrorEvent.IO_ERROR, onIoError);
m_socket.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurityError);
m_socket.addEventListener(ProgressEvent.SOCKET_DATA, onData);

И вы должны начать видеть события сокета.

0 голосов
/ 18 сентября 2011

Эти строки добавят слушателей событий к this, а не m_socket

addEventListener(Event.CLOSE, onClose);
addEventListener(Event.CONNECT, onConnect);
addEventListener(IOErrorEvent.IO_ERROR, onIoError);
addEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurityError);
addEventListener(ProgressEvent.SOCKET_DATA, onData);

Чтобы добавить их к m_socket, используйте

with(m_socket) {
    addEventListener(Event.CLOSE, onClose);
    addEventListener(Event.CONNECT, onConnect);
    addEventListener(IOErrorEvent.IO_ERROR, onIoError);
    addEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurityError);
    addEventListener(ProgressEvent.SOCKET_DATA, onData);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...