Никак не могу решить проблему соединения сервера на Java и ActionScript 3.0
Вот код сервера на java (взят с хэлпа Adobe, и немного видоизменен, но незначительно), компилируется в Eclipse
Код:
import java.io.*;
import java.net.*;
class SimpleServer
{
private static SimpleServer server;
ServerSocket socket;
Socket incoming;
BufferedReader readerIn;
PrintStream printOut;
public static void main(String[] args)
{
int port = 8080;
server = new SimpleServer(port);
}
private SimpleServer(int port)
{
System.out.println(">> Starting SimpleServer");
try
{
socket = new ServerSocket(port);
incoming = socket.accept();
readerIn = new BufferedReader(new InputStreamReader(incoming.getInputStream()));
printOut = new PrintStream(incoming.getOutputStream());
out("Enter EXIT to exit.\r");
boolean done = false;
while (!done)
{
String str = readerIn.readLine();
if (str == null)
{
done = true;
}
else
{
out("Echo: " + str + "\r");
if(str.trim().equals("EXIT"))
{
done = true;
}
}
}
incoming.close();
}
catch (Exception e)
{
System.out.println(e);
}
}
private void out(String str)
{
System.out.println(str);
printOut.println(str);
printOut.flush();
}
}
Код на as3:
Код AS3:
package MultiPlayer
{
import flash.display.Sprite;
import flash.events.DataEvent;
import flash.events.Event;
import flash.events.ProgressEvent;
import flash.net.*;
import flash.text.TextField;
public class MultiPlayer extends Sprite
{
private var port:Number = 8080;
private var socket:XMLSocket = new XMLSocket("127.0.0.1",port);
private var textField:TextField = new TextField();
public function MultiPlayer()
{
textField.height = 300;
textField.width = 600;
textField.x = 100;
textField.y = 100;
textField.backgroundColor = 0x00ff00;
textField.background = true;
this.addChild(textField);
socket.addEventListener(Event.CONNECT, onConnect );
socket.addEventListener(Event.CLOSE,onClose);
socket.addEventListener(DataEvent.DATA, onSocketData);
socket.connect("127.0.0.1",port);
}
private function onConnect( event:Event ):void
{
textField.appendText("Соединение для передачи установлено...\n");
}
private function onClose( event:Event ):void
{
textField.appendText("Соединение для передачи прервано...\n");
}
private function onSocketData( event:DataEvent ):void
{
textField.appendText("poly4eno [" + event.type + "] " + event.data);
try
{
socket.send("test\n");
textField.appendText("data sending...\n");
}
catch(e:Error)
{
textField.appendText("fail...\n");
}
}
}
}
Они соединяются, но потом ни к одному не приходит никакая информация, ни к другому.
Возможно проблема с файлом политики XMLсокет соединения. Потому что его просто нет. Я никак не могу понять
куда его надо поместить, что бы его автоматически загрузило.
Либо, где этот файл должен находиться, что бы можно было написать:
Код:
Security.loadPolicyFile("xmlsocket://127.0.0.1:8080");
я сделал файл crossdomain.xml
с текстом:
Код:
<?xml version="1.0"?>
<cross-domain-policy>
<allow-access-from domain="*" to-ports="*" />
</cross-domain-policy>
и разместил его в папке bin/ - проекта, рядом с файлом сервера, но ...
и ещё: если закоментить ту часть, де идет цикл, то функция out срабатывает, но данные не передаются в AS3.
Если кто-то сталкивался с этими проблемами, можете выложить работающие исходники?