Как отправить данные в формате AMF с flex на сервер сокетов Java? - PullRequest
0 голосов
/ 19 мая 2011

Я хочу знать, как отправлять данные в формате AMF из моего проекта flex AIR в сокет, написанный на Java.Я получаю CorruptedStreamException при отправке данных с использованием writeUTFBytes() методов.Кто-нибудь испытывал подобные проблемы?Также можно использовать AMF, только если я использую только LCDS?

private SimpleServer(int port)
{
    System.out.println(">> Starting SimpleServer on port " + port);
    try
    {
        socket      = new ServerSocket(port);
        incoming    = socket.accept();
        objectInputStream   = new ObjectInputStream(incoming.getInputStream());
        objectOutputStream = new ObjectOutputStream(incoming.getOutputStream());
        boolean done = false;
        while (!done)
        {
            Object obj = objectInputStream.readObject();
            System.out.println( obj.toString() );
            if(obj == null)
            {
                done = true;
                incoming.close();
            }
        }
    }
    catch (Exception e)
    {
        System.out.println(e);
    }
}

И моя функция as3 для отправки данных на сервер:

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

            var socket:Socket = new Socket();

            trace("Connect");
            socket.connect(host, port);

            trace("write");
            socket.writeUTFBytes("HelloSocket");

            trace("flush");
            socket.flush();
        }

Ответы [ 2 ]

2 голосов
/ 19 мая 2011

AMF обозначает формат сообщения действия.

Это спецификация, которая определяет, как передавать данные между клиентом ActionScript и внешней системой.

Поэтому многие технологии на стороне сервера включают AMF в свои пакеты. Например, BlazeDS, GraniteDS, pyAMF, amfphp, ...

Следовательно, для ответа на ваш вопрос нельзя использовать AMF за пределами LCDS. Это просто «конверт», который вы можете использовать для отправки вашего сообщения (= данные).

Должно работать даже с сокетами. Я считаю, что есть библиотека с открытым исходным кодом под названием merapi , которая использует этот принцип.

Приветствия

1 голос
/ 11 декабря 2013

Это старый вопрос сейчас, но, поскольку на стороне ActionScript вы используете

socket.writeUTFBytes("HelloSocket");

На стороне Java измените его на это, и оно будет работать без AMF:

BufferedReader in = new BufferedReader (new InputStreamReader((clientSocket.getInputStream())));
String line = "";               
while( (line = in.readLine()) != null) {
    processMessage(line);
}
...