这似乎是一个Erlang问题。我有这段代码来测试客户端发送数据,它是用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();
}
那么我有一个用 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.
现在,无论我从客户端发送什么,我总是得到
[<<0,0,0,4,0,0,0,32>>]
作为响应。我可以尝试直接向套接字写入字节而不是整数,但结果相同。我可以写更多或更少的数据,结果相同。UTF字符串也是如此。即使指定“4”作为数据包头长度,我仍然只得到[<<0,0,0,32>>]
这个一致的结果。我不明白我在这里做错了什么。