Erlang gen_tcp累积接收的数据

时间:2014-05-08 16:54:20

标签: erlang gen-tcp

这是我接收数据的代码

-module(t).
-compile(export_all).

start() ->
  {ok, LSock} = gen_tcp:listen(5555, [binary, {packet, 0},
    {active, false}]),
  {ok, Sock} = gen_tcp:accept(LSock),
  {ok, Bin} = do_recv(Sock, []),
  ok = gen_tcp:close(Sock),
  Bin.

do_recv(Sock, Bs) ->

  io:format("(="), io:format(Bs),io:format("=)~n"),

  case gen_tcp:recv(Sock, 0) of
    {ok, B} ->
      do_recv(Sock, [Bs, B]);
    {error, closed} ->
      {ok, list_to_binary(Bs)}
  end.

我发送到套接字串联 - 1,然后是2,然后是3,然后是4,然后是5

代码累积接收数据

它打印到屏幕

(=12345=)

如何将代码修改为打印的代码

(=1=)
(=2=)
(=3=)
(=4=)
(=5=)

没有累积数据

1 个答案:

答案 0 :(得分:2)

TCP将数据表示为没有消息结构的流。这与Erlangs的实现没有任何关系。

如果需要消息结构,则必须在数据流中对其进行编码。

Erlang可以帮助您使用简单的内置数据包结构,其长度为1,2或4字节,后跟数据。这是{packet N}对N等于1,2或4

的作用

但您还需要发送符合此结构的数据。