【问题标题】:Erlang gen_tcp connect questionErlang gen_tcp 连接问题
【发布时间】:2011-08-12 00:04:53
【问题描述】:

简单的问题...

这段代码..

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

【问题讨论】:

    标签: sockets tcp erlang


    【解决方案1】:

    根据gen_tcp:connect 文档:

    • [binary, {packet, 0}] 是传递给连接函数的选项列表。
    • binary 表示在套接字上发送/接收的数据是二进制格式(与列表格式相反。
    • {packet, 0},有点令人困惑,文档中似乎没有涵盖它。在与 Freenode 上的 #erlang 中的一些知识渊博的小伙交谈后,我发现 packet 选项指定了多少字节表示数据包长度。在幕后,长度从数据包中被剥离,而 erlang 只是向您发送没有长度的数据包。因此{packet, 0} 与没有长度的原始数据包相同,除了数据的接收者之外,所有内容都被处理。有关这方面的更多信息,请查看inet:setopts

    希望对您有所帮助。

    【讨论】:

      【解决方案2】:

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

      二进制表示接收到的数据包以二进制形式传递。 (但您仍然可以使用 gen_tcp:send 和“消息”之类的消息)

      【讨论】:

        猜你喜欢
        • 2012-04-02
        • 2014-12-21
        • 2018-06-01
        • 2018-05-02
        • 2020-05-23
        • 2011-08-07
        • 2011-04-11
        • 2012-09-21
        • 1970-01-01
        相关资源
        最近更新 更多