Flex与javasocket的通信

Flex与javasocket的通信,java,actionscript-3,sockets,flex3,Java,Actionscript 3,Sockets,Flex3,我有一个Flex AIR应用程序,我正在尝试从Java服务器获取数据。有人能告诉我这种方法是否有效吗 在Java中启动ServerSocket并等待连接。 使用Flex连接到同一端口。 从Java服务器向套接字写入一些数据。 读取Flex端的数据并进行处理 -- 更新: 我想我可以让它工作,但我在Flex端读取的数据似乎是空的 我的服务器代码是: socket = new ServerSocket(port); client = socket.accept()

我有一个Flex AIR应用程序,我正在尝试从Java服务器获取数据。有人能告诉我这种方法是否有效吗

在Java中启动ServerSocket并等待连接。
使用Flex连接到同一端口。
从Java服务器向套接字写入一些数据。
读取Flex端的数据并进行处理

-- 更新: 我想我可以让它工作,但我在Flex端读取的数据似乎是空的

我的服务器代码是:

        socket  = new ServerSocket(port);
        client  = socket.accept();

        InetAddress address = client.getInetAddress();           

        BufferedReader in = new BufferedReader( new InputStreamReader(
                client.getInputStream()));
        PrintWriter out = new PrintWriter(client.getOutputStream());            

        out.println("hi");
        out.flush();
我在Flex中的代码是

        private function onRecieveDataClick():void
        {
            var host:String = "127.0.0.1";
            var port:int = 9090;

            var socket:Socket = new Socket();
            socket.endian = Endian.BIG_ENDIAN;
            socket.addEventListener(Event.CONNECT, onConnect);
            socket.connect(host, port);
        }

        private function onConnect(event:Event):void
        {
            trace(" Connected to server socket ");
            var socket:Socket = Socket(event.target);
            var obj:String = socket.readUTFBytes( socket.bytesAvailable);
            trace(obj);
        }

我当前的问题是
socket.bytesAvailable
变为0,因此
obj
将显示为“”。那么,如何使用Flex中的
套接字读取从服务器发送的数据呢?

在进行了一些基本的谷歌搜索之后,我发现了一篇博客文章,它完全符合您的描述:

但是,该示例在本地主机上运行java应用程序,而不是像您描述的那样远程运行。 因此,在尝试连接到远程服务器套接字时,可能会遇到一些沙箱冲突。这可以通过向java app server的根添加一个crossdomain.xml来解决

事实上,这篇博文是默拉皮在幕后所做工作的一个基本例子


干杯

那你为什么不直接使用BlazeDS/LCD功能呢?您是在浏览器中使用Flex还是在使用AIR。如果您在浏览器中使用flex,我不明白您为什么要自己编写套接字服务器。我使用的是AIR。然后,我建议您看看merapi源代码,您可以通过查看他们的代码获得所需的答案。否则,您也可以使用merapi,它是免费的,而且工作正常。您还应该知道,从flex到java,通过套接字发送的数据(kb)存在大小限制。在我的情况下,服务器将向套接字写入数据,我已经看到了许多其他方式的示例。merapi有两种方式:PSeems正是我所寻找的。谢谢你,丹尼斯。