Il s'agit d'un problème erlang, semble-t-il. J'ai ce code pour tester l'envoi de données client, écrit en Actionscript 3:Communication flash avec le serveur Erlang
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();
}
J'ai ce petit serveur, écrit en 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.
Maintenant, peu importe ce que j'envoie de la client, je reçois TOUJOURS [<<0,0,0,4,0,0,0,32>>]
comme réponse. Je peux essayer d'écrire des octets sur le socket directement au lieu de ints, et je reçois la même chose. Je peux écrire plus ou moins de données, même résultat. Chaînes UTF même résultat. Même en spécifiant "4" comme longueur d'en-tête de paquet, j'obtiens juste le même résultat cohérent de [<<0,0,0,32>>]
à la place. Je ne comprends pas ce que je fais mal ici.