gen_tcp:recv收到的二进制文件是什么?

时间:2012-10-02 01:42:46

标签: erlang gen-tcp

loop(Socket) ->
    case gen_tcp:recv(Socket, 0) of
        {ok, Bin} ->
            io:format("Bin=~p~n", [Bin]),
            loop(Socket);
        {error, Reason} ->
            io:format("Reason=~p~n", [Reason])
    end.

{env, [
    {tcp_listen_options, [binary, {active, false}, {packet, 0}, {reuseaddr, true}, {backlog, 256}]},
    {port, 5678}
]}

我是否将packet设置为0或1,2,4,总是得到以下内容:

调用gen_tcp:发送(S1,term_to_binary( “1”))。输出<<< 131,107,0,1,49>>
调用gen_tcp:发送(S1,term_to_binary(A))。输出<<< 131,100,0,1,97>>
调用gen_tcp:发送(S1,term_to_binary( “ABCD”))。输出<<< 131,107,0,4,97,98,99,100>>
调用gen_tcp:发送(S1,term_to_binary(1))。输出<<< 131,97,1>>

我的问题是:
1.什么是<< 131,107>? 2.发送1而不是“1”并获得没有包长度的二进制文件,如'131,107,0,1',为什么?

2 个答案:

答案 0 :(得分:1)

使用term_to_binary时,将erlang值转换为外部术语格式。 131是该格式的标题。 107表示"下一个字节是字符串"您可以在此处阅读:http://www.erlang.org/doc/apps/erts/erl_ext_dist.html

我相信你在这里不需要term_to_binary。你可以使用

gen_tcp:send(S1,<< "abcd" >>)

代替

答案 1 :(得分:0)

我使用term_to_binary进行编码,但不使用binary_to_term进行解码。