看来,这是一个 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>>]
。我不明白我在这里做错了什么。