Я знаю, что есть много людей, которые уже задавали этот вопрос, но во всех темах, которые я прочитал, я не мог найти одно решение для моей проблемы (даже если у других была такая же проблема, она не работала для меня).
Как сказано в заголовке, я пытаюсь подключиться из Flash / SWF-приложения к небольшому Java-серверу, который я написал через Sockets. Он отлично работает в автономном режиме (на той же машине), но как только я помещаю .swf в веб-пространство и открываю его оттуда, Flash запрашивает файл политики с сервера. В этом нет ничего плохого, но моя проблема в том, что Flash отключается после (надеюсь) получения файла политики, но не подключается снова.
Мой сервер всегда открывает новый поток, когда клиент подключается, но проблема не в этом, поскольку я уже пробовал его, не открывая новый поток.
Вот мой код:
while (true) {
connection = providerSocket.accept();
System.out.println("Incoming connection from " +
connection.getInetAddress().getHostName());
BufferedReader in = new BufferedReader(
new InputStreamReader(connection.getInputStream()));
String request = in.readLine();
if (request != null && request.contains("<policy-file-request/>")) {
System.out.println("Authorization request.");
PrintStream out = new PrintStream(connection.getOutputStream(), true);
out.println("<?xml version=\"1.0\"?><cross-domain-policy><!DOCTYPE cross-domain-policy SYSTEM \"http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd\"><allow-access-from domain=\"*\" to-ports=\"3002\" /></cross-domain-policy>\u0000");
out.flush();
System.out.println("AuthData sent.");
connection.close();
System.out.println("Authorization complete.");
connection = providerSocket.accept();
System.out.println("TEST");
RequestProcessor c = new RequestProcessor(connection, connectionCounter++);
Thread t = new Thread(c);
t.start();
} else {
RequestProcessor c = new RequestProcessor(connection, connectionCounter++);
Thread t = new Thread(c);
t.start();
}
}
Вы наверняка заметите, что я использую «\ u0000» в конце вместо «\ 0», но не волнуйтесь, я также проверял этот случай, ничего не изменил. : /
Я даже не дошёл до «ТЕСТА», потому что у меня нет нового соединения. И если я сам не закрою соединение, flash автоматически отключит меня.
Последнее, что я попробовал, было просто отправить xml без какого-либо запроса (в самом начале, после установления соединения). Я получил «recv failed» - ошибка для этого.
PS: RequestProcessor - это мой новый поток, в котором я буду обрабатывать строки / команды, отправленные из my.swf-файла ...
Спасибо за помощь! :)