This is an erlang problem, it seems. I have this code to test the 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 get [<<0,0,0,4,0,0,0,32>>] as the response. 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, same result. UTF strings same result. Even when specifying "4" as the packet header length, I just get the same consistent result of [<<0,0,0,32>>] instead. I don't understand what I'm doing wrong here.
Here's an extract from our working Erlang server that connects to a Flash socket...
It is based on Klacke's chargen server example: 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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With