Я пишу 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 также не срабатывал ...
Любая помощь будет принята с благодарностью, я потратил большую часть своего дня на это иЯ очень разочарован тем, что не могу заставить работать базовую связь через сокет: - /