代码之家  ›  专栏  ›  技术社区  ›  listen

使用gentcp:send/2通过套接字发送消息

  •  1
  • listen  · 技术社区  · 9 年前

    如何使用gen_tcp在erlang中发送形式为[Integer,String]的消息。

    例如:我希望使用gen_tcp:send/2通过套接字发送格式为[25,“Hello”]或[50,“Hi”]的消息。

    我试着去做[ID|Msg],但没用。 谢谢

    1 回复  |  直到 9 年前
        1
  •  5
  •   rorra    9 年前

    在Erlang中,字符串只是整数的列表,因此列表 [25, "Hello"] 实际上是这样表示的 [25, [72,101,108,108,111]]

    问题仍然是,如何通过Erlang中的Socket发送该信息。

    根据 documentation ,在Erlang中,可以将数据发送为 二进制的 或作为 列表 ,您可以将其设置为 {mode, binary} {mode, list} 创建套接字时。

    如果您正在与 二进制的 数据(这是建议,因为发送和接收二进制文件比列表快),您可以执行以下操作:

    {ok, Socket} = gen_tcp:connect(Host, Port, [{mode, binary}]).
    Data = list_to_binary([25, "Hello"]).
    gen_tcp:send(Socket, Data).
    

    现在,如果你在 列表 模式下,只需直接发送列表:

    {ok, Socket} = gen_tcp:connect(Host, Port, [{mode, binary}]).
    Data = [25, "Hello"].
    gen_tcp:send(Socket, Data).
    

    在服务器端,如果您在Socket中接收数据 列表 模式下,您可以使用以下命令转换回原始格式:

    [Integer|String] = ListReceived.
    

    如果您在Socket中接收数据 二进制的 模式下,则必须将数据从二进制转换为列表,如:

    [Integer|String] = binary_to_list(BinaryReceived).