Flash communication with Erlang server

This is an erlang problem, it seems. I have this code to test a client sending data written in ActionScript 3:

var socket:Socket=new Socket("localhost", 2345);
socket.addEventListener(Event.CONNECT, connected);

private function connected(event:Event):void {
    socket.writeInt(12); //packet length, should be correct? 4 bytes each?
    socket.writeInt(3);
    socket.writeInt(6);
    socket.writeInt(9);
    socket.flush();
}

Then I have this small server written in Erlang:

start_nano_server() ->
    {ok, Listen} = gen_tcp:listen(2345, [binary, {packet, 0},
                     {reuseaddr, true},
                     {active, true},
                    {packet_size, 128}]),
    {ok, Socket} = gen_tcp:accept(Listen),
    gen_tcp:close(Listen), 
    receive_data(Socket, []).

receive_data(Socket, SoFar) ->
    receive
    {tcp,Socket,Bin} ->   
        receive_data(Socket, [Bin|SoFar]);
    {tcp_closed,Socket} ->
        Bytes=list_to_binary(reverse(SoFar)),
        io:format("~p~n",[Bytes])
    end.

Now, no matter what I send from the client, I ALWAYS receive [<<0,0,0,4,0,0,0,32>>]as an answer. I can try writing bytes to the socket directly instead of ints, and I get the same thing. I can write more or less data, the same result. UTF builds the same result. Even with "4" as the length of the packet header, I get the same consistent result [<<0,0,0,32>>]. I do not understand what I am doing wrong here.

+3
source share
4

, - .

, , Flash . , , , . , , Flash Erlang - , , , Flash , - Erlang.

Socket (, ) Flash, , , , -, .

Flash- , .

0

Erlang, Flash...

Klacke: http://erlang.org/examples/klacke_examples/chargen.erl

-module(remoting_soc).

-export([accept/1]).

accept(Listen) ->

    {ok, Soc} = gen_tcp:accept(Listen),
    Pid = spawn(fun() -> loop(Soc) end),
    gen_tcp:controlling_process(Soc,Pid),
    %% Start Listening for another connection
    remoting_soc:accept(Listen).

loop(Socket)->

    receive

        {tcp, Socket,"register"++Rest} ->
            ...do stuff...
            loop(Socket);

    end.
+4

Do not try to close Listenbefore receiving data.

+3
source

I suspect this is more of a problem with Flash - your Erlang server code works great with the Java socket client.

+1
source

All Articles