У меня есть Groovy-сервер и клиент Flex.Когда я пытаюсь подключиться из Flex к приложению Groovy, я получаю сообщение <policy-file-request/>
.Затем я отправляю какой-то политический XML-ответ и пытаюсь что-то отправить на сервер.Но вместо того, чтобы получать что-то на Groovy, я не получаю абсолютно ничего.И через несколько секунд я получаю SecurityException
на стороне приложения Flex.
Код Groovy-сервера:
import java.util.Scanner
class server
{
public static handleConnection(client)
{
PrintWriter socketwriter = new PrintWriter(client.getOutputStream())
Scanner socketreader = new Scanner(client.getInputStream())
while (socketreader.hasNext())
{
String s = socketreader.nextLine()
println s
if (s =~ /<policy-file-request\s*\/>/)
{
socketwriter.print("<?xml version=\"1.0\"?><!DOCTYPE cross-domain-policy SYSTEM \"/xml/dtds/cross-domain-policy.dtd\"><cross-domain-policy><site-control permitted-cross-domain-policies=\"master-only\" /><allow-access-from domain=\"*\" to-ports=\"2900-2910\" /></cross-domain-policy>\n\0\n")
socketwriter.flush()
socketwriter.close()
client.close()
println "Policy File sent."
return
}
}
socketwriter.print("Connection: Done.\n")
socketwriter.flush()
socketwriter.close()
socketreader.close()
}
static main(args)
{
ServerSocket serversocket
try
{
serversocket = new ServerSocket(2900)
println "Server is up and running"
while (true)
{
Socket client = serversocket.accept()
Thread.start {
server.handleConnection(client)
}
}
} catch (e)
{
e.printStackTrace()
} finally
{
serversocket.close()
}
}
}
Код клиента Flex:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
<![CDATA[
import flash.net.Socket;
import flash.events.*;
import mx.controls.Alert;
private var socket : Socket;
private function connect() : void
{
socket = new Socket();
socket.addEventListener(Event.CONNECT, onConnect);
socket.addEventListener(ProgressEvent.SOCKET_DATA, onSocketData);
socket.addEventListener(SecurityErrorEvent.SECURITY_ERROR, ServerSecurityError);
socket.connect("localhost", 2900);
Alert.show("yay!");
}
private function ServerSecurityError(evt : Event) : void
{
Alert.show("security error")
}
private function onConnect(evt : Event) : void
{
Alert.show("Connected to server!");
}
private function onSocketData(evt : ProgressEvent) : void
{
var data : String = socket.readUTFBytes(socket.bytesAvailable);
Alert.show("Read: " + data);
}
private function send() : void
{
var msg : String = "Hello, World!";
socket.writeUTFBytes(msg);
socket.flush();
Alert.show("Sent: " + msg);
}
]]>
</mx:Script>
<mx:Button label="connect" click="connect()" x="10" y="10" />
<mx:Button label="send something" click="send()" x="10" y="40" />
</mx:Application>
Итак, вопрос: Как мне подключиться, чтобы получить стабильную связь между сервером и клиентом?