приложение flex сбрасывает соединение при использовании XmlSocket - PullRequest
1 голос
/ 23 марта 2010

Я новичок, и пытаюсь получить пример, приведенный здесь: http://livedocs.adobe.com/flex/3/html/help.html?content=17_Networking_and_communications_5.html

Я использую тот же сервер Java, указанный там. и я создаю XmlSocket в приложении Flex Air. Когда я запускаю свое эфирное приложение, я получаю сброс соединения java.net.SocketException на java-сервере.

Оба являются автономными приложениями на моем рабочем столе.

Код Flex:

<?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);
    }
}

Заранее большое спасибо ..

1 Ответ

1 голос
/ 23 марта 2010

Если я правильно интерпретирую ваше утверждение о том, что на вашем Java-сервере происходит исключение, а не ваше приложение AIR, я предполагаю, что это флэш-память, которая выдает запрос на файл poilcy. У меня есть приложения, которые используют XMLSockets (он работает как обычная флэш-память, а не AIR, но, насколько я знаю, они очень похожи.) Я заметил, что при установлении соединения он всегда отправляет запрос файла политики (строка " ", за которым следует нулевой байт), и, как только он получает от сервера то, что считает ответом, он отключает сокет. Если это так, вы должны увидеть эхо-запрос на консоли для вашего Java-сервера. Для борьбы с этим вам потребуется либо запустить отдельный сервер политики и установить сервер политики перед подключением, либо изменить сервер для обработки запроса файла политики. У меня есть сообщение на другом форуме, в котором есть пример кода сервера / клиента (файл XMLSocket.zip), оно содержит пример политики и сервер Java, Flash-клиент находится в открытом laszlo (который может быть скомпилирован для Flash ).

...