Flex和Java Socket之间的通信

时间:2011-05-19 11:28:40

标签: java actionscript-3 sockets flex3

我有一个Flex AIR应用程序,我正在尝试从Java Server获取数据。有人可以告诉我这种方法是否有效?

用Java启动ServerSocket并等待连接 使用Flex连接到同一端口 从Java Server向套接字写入一些数据 读取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中的Socket读取服务器发送的数据?

1 个答案:

答案 0 :(得分:2)

经过一些基本的谷歌搜索后,我发现了一篇博文,它完全符合您的描述: http://arthurnn.com/blog/2010/12/09/socket-connection-beteween-flex-air-and-java/

然而,该示例在localhost上运行java应用程序,而不是像您描述的那样远程运行。 因此,在尝试连接到远程服务器套接字时,可能会遇到一些沙箱违规。这可以通过将crossdomain.xml添加到java app server的根目录来解决。

事实上,这篇博文是merapi幕后工作的一个基本例子。

干杯