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 consistant result of [<<0,0,0,32>>] instead. I don't understand what I'm doing wrong here.
> This is an erlang problem, it seems. I have this code to test the client > sending data, written in Actionscript 3:
> Code: > 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?
Sending a packet length isn't needed given your Erlang code, since you specify {packet, 0}. If you want packets to have a 4-byte length, you should specify {packet, 4} in your server.
> Now, no matter what I send from the client, I ALWAYS get > [<<0,0,0,4,0,0,0,32>>] as the response.
By "response" here, do you mean that your io:format call in your tcp_closed clause always prints <<0,0,0,4,0,0,0,32>> ? Also, just to be clear, are you really seeing [<<0,0,0,4,0,0,0,32>>], i.e., a binary within a list, or are you seeing just a binary?
> 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 consistant result of > [<<0,0,0,32>>] instead. I don't understand what I'm doing wrong here.
I took your code, compiled it with R12B-5 on OS X, and ran an Erlang client against it that did what your ActionScript code does, and it worked as expected. I ran a similar Python client against it, and that worked as expected too. I don't have ActionScript to try. So either the ActionScript client isn't doing what you think it is, or maybe some other client is interfering on that port (maybe try another port), or you're not showing us all the code.
Have you tried using wireshark to see what's actually going across the network?
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 consistant result of [<<0,0,0,32>>] instead. I don't understand what I'm doing wrong here.
> 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 > consistant result of [<<0,0,0,32>>] instead. I don't understand what I'm > doing wrong here.