java - Flex 应用程序在使用 XmlSocket 时重置连接

标签 java apache-flex sockets

我是 Flex 新手,我正在尝试获取此处给出的示例:http://livedocs.adobe.com/flex/3/html/help.html?content=17_Networking_and_communications_5.html

我正在使用那里给出的相同的java服务器。我正在 Flex Air 应用程序中创建 XmlSocket。当我运行 Air 应用程序时,我在 java 服务器上重置了 java.net.SocketException 连接。

两者都是我桌面上的独立应用程序。

弹性代码:

<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" initialize="init()">

    <mx:Script>
        <![CDATA[

        import mx.controls.Alert;

        public function init():void
        {
            var xmlsock:XMLSocket = new XMLSocket();

            //xmlsock.addEventListener(DataEvent.DATA, onData);
            xmlsock.addEventListener(Event.CLOSE, onData);
            xmlsock.addEventListener(Event.CONNECT, onData);
            xmlsock.addEventListener(DataEvent.DATA, onData);
            xmlsock.addEventListener(IOErrorEvent.IO_ERROR, onData);
            xmlsock.addEventListener(ProgressEvent.PROGRESS, onData);
            xmlsock.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onData);

            xmlsock.connect("localhost", 9020);
            //xmlsock.send("<hello></hello>");



        }
        private function onData(event:Event):void
        {
             myText.text=""+event.toString();
        }
            ]]>
    </mx:Script>
    <mx:Panel>
        <mx:TextArea id="myText">

        </mx:TextArea>
    </mx:Panel>
</mx:WindowedApplication>

Java 代码:

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 = 9020;

        try
        {
            port = Integer.parseInt(args[0]);
        }
        catch (ArrayIndexOutOfBoundsException e)
        {
            // Catch exception and keep going.
        }

        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());
            printOut.println("Enter EXIT to exit.\n\0");
            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)
    {
        printOut.println(str);
        System.out.println(str);
    }
}

提前非常感谢..

最佳答案

如果我正确地解释了您的陈述,即异常发生在您的 Java 服务器中,而不是您的 AIR 应用程序中,我猜测它是 flash 发出的 poilcy 文件请求。我有使用 XMLSockets 的应用程序(它作为普通闪存运行,而不是 AIR,但据我所知它们非常相似。)我注意到,当建立连接时,它总是会发送一个策略文件请求(字符串“”后跟一个空字节),并且一旦它收到它认为来自服务器的答复,它就会断开套接字。如果是这种情况,您应该在 java 服务器的控制台上看到请求回显。为了解决这个问题,您需要运行单独的策略服务器并在连接之前设置策略服务器,或者更改服务器来处理策略文件请求。我有a post on another forum that has example server / client code (文件XMLSocket.zip)它包含一个示例策略和java服务器,flash客户端是开放的laszlo(可以编译到flash)。

关于java - Flex 应用程序在使用 XmlSocket 时重置连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2500546/

相关文章:

java - 如何使用基于java的配置将队列绑定(bind)到交换

java - 我怎样才能做一个计时器?

java - 将项目升级到grails 2.0.1

javascript - 我如何使用 HTML5 localStorage 之类的东西,但在浏览器之间共享?

java - 如何在 Flex/BlazeDS 中同时支持 HTTP 和 HTTPS channel ?

actionscript-3 - 从Array()中间删除一项的最快方法

Python:在列表中存储和删除线程

java - 帮助通过 nat 与套接字通信

C++ 通过 UDP 套接字发送结构

java - EJB 将所有异常包装成 EJBException