0
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}
]}

0に設定packetしても、1、2、4 に設定しても、常に次のようになります。

gen_tcp:send(S1,term_to_binary("1"))。出力 <<131,107,0,1,49>>
gen_tcp:send(S1,term_to_binary(a))。出力 <<131,100,0,1,97>>
gen_tcp:send(S1,term_to_binary("abcd"))。出力 <<131,107,0,4,97,98,99,100>>
gen_tcp:send(S1,term_to_binary(1))。出力 <<131,97,1>>

私の質問は:
1. <<131,107>> とは何ですか?
2. 「1」の代わりに 1 を送信し、「131,107,0,1」のようにパケット長のないバイナリを取得するのはなぜですか?

4

2 に答える 2

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" >>)

代わりは

于 2012-10-02T05:58:43.450 に答える
0

エンコードには term_to_binary を使用しますが、デコードには binary_to_term を使用しません。

于 2012-10-02T02:13:08.837 に答える