Erlang gen_tcp连接问题

时间:2011-04-24 20:47:51

标签: sockets tcp erlang

简单的问题......

此代码..

client() ->
    SomeHostInNet = "localhost" % to make it runnable on one machine
    {ok, Sock} = gen_tcp:connect(SomeHostInNet, 5678, 
                                 [binary, {packet, 0}]),
    ok = gen_tcp:send(Sock, "Some Data"),
    ok = gen_tcp:close(Sock).

非常清楚,除了我不太明白[binary,{packet,0}]是什么意思? 有人在乎解释吗?

MadSeb

2 个答案:

答案 0 :(得分:10)

根据gen_tcp:connect文档:

  • [binary, {packet, 0}]是传递给connect函数的选项列表。
  • binary表示在套接字上发送/接收的数据是二进制格式(而不是列表格式。
  • {packet, 0},有点令人困惑,文档中似乎没有涉及。在与Freenode上的#erlang中的一些知识渊博的人交谈后,我发现packet选项指定了多少字节表示数据包长度。在幕后,长度从数据包中删除,而erlang只是向您发送没有长度的数据包。因此{packet, 0}与没有长度的原始数据包相同,并且处理所有内容但是数据的接收者。有关详细信息,请查看inet:setopts

希望有所帮助。

答案 1 :(得分:0)

{packet,0}用于指示TCP数据以未修改的形式直接传递给应用程序。

二进制表示接收的数据包以二进制形式传送。 (但你仍然可以使用gen_tcp:发送消息,如“消息”)